From 7ed29e2ce490ef168ed5bb9681f5497187236b51 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sat, 28 Sep 2024 11:51:08 -0700 Subject: [PATCH] more recursive docs types (#4028) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * more recursive Signed-off-by: Jess Frazelle * updates; Signed-off-by: Jess Frazelle * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest) * updates Signed-off-by: Jess Frazelle * updates Signed-off-by: Jess Frazelle * fixes Signed-off-by: Jess Frazelle * add the format Signed-off-by: Jess Frazelle * updates Signed-off-by: Jess Frazelle * get the descriptions again Signed-off-by: Jess Frazelle * updates Signed-off-by: Jess Frazelle * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest) * updates Signed-off-by: Jess Frazelle --------- Signed-off-by: Jess Frazelle Co-authored-by: github-actions[bot] --- docs/kcl/std.json | 414406 +++++---------- docs/kcl/types/AngledLineData.md | 4 - .../kcl/types/AngledLineThatIntersectsData.md | 2 - docs/kcl/types/AngledLineToData.md | 2 - docs/kcl/types/ArcData.md | 5 - docs/kcl/types/Axis.md | 50 + docs/kcl/types/AxisAndOrigin.md | 81 + docs/kcl/types/AxisDirectionPair.md | 22 + docs/kcl/types/AxisOrEdgeReference.md | 42 + docs/kcl/types/BasePath.md | 24 + docs/kcl/types/BezierData.md | 2 - docs/kcl/types/ChamferData.md | 4 +- docs/kcl/types/CircleData.md | 2 - docs/kcl/types/CircularPattern2dData.md | 4 +- docs/kcl/types/CircularPattern3dData.md | 4 +- docs/kcl/types/Direction.md | 42 + docs/kcl/types/EdgeCut.md | 58 + docs/kcl/types/EdgeReference.md | 41 + docs/kcl/types/ExtrudeSurface.md | 98 + docs/kcl/types/FaceTag.md | 35 +- docs/kcl/types/FilletData.md | 4 +- docs/kcl/types/GeoMeta.md | 22 + docs/kcl/types/HelixData.md | 2 - docs/kcl/types/ImportFormat.md | 27 +- docs/kcl/types/ImportedGeometry.md | 4 +- docs/kcl/types/LinearPattern2dData.md | 4 +- docs/kcl/types/LinearPattern3dData.md | 4 +- docs/kcl/types/LoftData.md | 2 - docs/kcl/types/Metadata.md | 21 + docs/kcl/types/Mirror2dData.md | 4 +- docs/kcl/types/Path.md | 168 + docs/kcl/types/PlaneData.md | 21 +- docs/kcl/types/PlaneType.md | 41 + docs/kcl/types/Point3d.md | 22 + docs/kcl/types/PolarCoordsData.md | 2 - docs/kcl/types/RevolveData.md | 4 +- docs/kcl/types/ShellData.md | 4 +- docs/kcl/types/Sketch.md | 10 +- docs/kcl/types/SketchData.md | 21 +- docs/kcl/types/SketchOrSurface.md | 74 +- docs/kcl/types/SketchSet.md | 15 +- docs/kcl/types/SketchSurface.md | 27 +- docs/kcl/types/Solid.md | 10 +- docs/kcl/types/SolidSet.md | 15 +- docs/kcl/types/StandardPlane.md | 19 +- docs/kcl/types/StartOrEnd.md | 41 + docs/kcl/types/System.md | 34 + docs/kcl/types/TagEngineInfo.md | 24 + docs/kcl/types/TangentialArcData.md | 3 - docs/kcl/types/Uint.md | 15 + docs/kcl/types/UnitLength.md | 90 + ...scale-Inch-scale-1-Google-Chrome-linux.png | Bin 50897 -> 50682 bytes ...scale-Inch-scale-1-Google-Chrome-win32.png | Bin 46793 -> 45141 bytes ...scale-Inch-scale-2-Google-Chrome-linux.png | Bin 47910 -> 47698 bytes ...scale-Inch-scale-2-Google-Chrome-win32.png | Bin 43743 -> 42402 bytes ...Millimeter-scale-1-Google-Chrome-linux.png | Bin 56023 -> 56236 bytes ...Millimeter-scale-1-Google-Chrome-win32.png | Bin 52206 -> 50902 bytes ...Millimeter-scale-2-Google-Chrome-linux.png | Bin 48533 -> 49106 bytes ...Millimeter-scale-2-Google-Chrome-win32.png | Bin 44403 -> 43263 bytes ...hould-look-right-1-Google-Chrome-linux.png | Bin 42889 -> 42689 bytes ...hould-look-right-1-Google-Chrome-win32.png | Bin 38995 -> 37660 bytes ...e-with-none-z-up-1-Google-Chrome-linux.png | Bin 73141 -> 73108 bytes ...e-with-none-z-up-1-Google-Chrome-win32.png | Bin 63000 -> 60063 bytes ...-load---solid-2d-1-Google-Chrome-linux.png | Bin 47182 -> 47452 bytes ...-load---solid-2d-1-Google-Chrome-win32.png | Bin 44026 -> 42824 bytes ...-load---solid-3d-1-Google-Chrome-linux.png | Bin 63154 -> 63452 bytes ...-load---solid-3d-1-Google-Chrome-win32.png | Bin 59488 -> 58140 bytes src/wasm-lib/derive-docs/src/lib.rs | 15 +- .../derive-docs/tests/args_with_lifetime.gen | 13 +- .../derive-docs/tests/args_with_refs.gen | 13 +- src/wasm-lib/derive-docs/tests/array.gen | 13 +- src/wasm-lib/derive-docs/tests/box.gen | 13 +- .../tests/doc_comment_with_code.gen | 13 +- src/wasm-lib/derive-docs/tests/lineTo.gen | 14 +- src/wasm-lib/derive-docs/tests/min.gen | 13 +- src/wasm-lib/derive-docs/tests/option.gen | 13 +- .../derive-docs/tests/option_input_format.gen | 13 +- .../tests/return_vec_box_sketch.gen | 13 +- .../derive-docs/tests/return_vec_sketch.gen | 13 +- src/wasm-lib/derive-docs/tests/show.gen | 13 +- .../tests/test_args_with_exec_state.gen | 12 +- src/wasm-lib/kcl/src/docs/gen_std_tests.rs | 38 +- src/wasm-lib/kcl/src/docs/mod.rs | 36 +- .../kcl/src/docs/templates/schema.hbs | 10 +- .../kcl/src/lint/checks/std_lib_args.rs | 5 +- src/wasm-lib/kcl/src/parser/parser_impl.rs | 2 +- 86 files changed, 120154 insertions(+), 295803 deletions(-) create mode 100644 docs/kcl/types/Axis.md create mode 100644 docs/kcl/types/AxisAndOrigin.md create mode 100644 docs/kcl/types/AxisDirectionPair.md create mode 100644 docs/kcl/types/AxisOrEdgeReference.md create mode 100644 docs/kcl/types/BasePath.md create mode 100644 docs/kcl/types/Direction.md create mode 100644 docs/kcl/types/EdgeCut.md create mode 100644 docs/kcl/types/EdgeReference.md create mode 100644 docs/kcl/types/ExtrudeSurface.md create mode 100644 docs/kcl/types/GeoMeta.md create mode 100644 docs/kcl/types/Metadata.md create mode 100644 docs/kcl/types/Path.md create mode 100644 docs/kcl/types/PlaneType.md create mode 100644 docs/kcl/types/Point3d.md create mode 100644 docs/kcl/types/StartOrEnd.md create mode 100644 docs/kcl/types/System.md create mode 100644 docs/kcl/types/TagEngineInfo.md create mode 100644 docs/kcl/types/Uint.md create mode 100644 docs/kcl/types/UnitLength.md diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 646303d80..4c9a5de95 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -14,6 +14,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -24,6 +25,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -47,6 +49,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -57,6 +60,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -85,447 +89,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -539,6 +410,307 @@ "type": "number", "format": "double" }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + }, "required": true }, { @@ -564,3541 +736,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -4111,6 +1838,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -4139,447 +1867,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -4593,6 +2188,307 @@ "type": "number", "format": "double" }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + }, "required": true }, { @@ -4618,3541 +2514,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -8165,6 +3616,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -8217,6 +3669,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -8242,4388 +3695,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -12651,138 +4221,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -12818,1993 +4278,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -14834,48 +4648,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -14883,503 +5527,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -15434,6 +7031,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -15459,4388 +7057,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -19868,138 +7583,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -20035,1993 +7640,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -22051,48 +8010,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -22100,503 +8889,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -22651,6 +10393,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -22676,4388 +10419,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -27085,138 +10945,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -27252,1993 +11002,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -29268,48 +11372,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -29317,503 +12251,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -29848,460 +13735,7 @@ }, "intersectTag": { "description": "The tag of the line to intersect with.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" }, "offset": { "description": "The offset from the intersecting line.", @@ -30311,6 +13745,329 @@ } } }, + "schemaDefinitions": { + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + }, "required": true }, { @@ -30336,4388 +14093,763 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + "schemaDefinitions": { + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } }, - "value": { - "description": "The paths in the sketch.", + "SourceRange": { "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -34745,138 +14877,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -34912,1993 +14934,321 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -36928,48 +15278,107 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ + "faceId", "id", - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -36977,503 +15386,1995 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -37513,6 +17414,7 @@ } } }, + "schemaDefinitions": {}, "required": true }, { @@ -37538,4388 +17440,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -41947,138 +17966,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -42114,1993 +18023,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -44130,48 +18393,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -44179,503 +19272,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -44715,6 +20761,7 @@ } } }, + "schemaDefinitions": {}, "required": true }, { @@ -44740,4388 +20787,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -49149,138 +21313,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -49316,1993 +21370,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -51332,48 +21740,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -51381,503 +22619,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -51968,6 +24159,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -51993,2973 +24185,2245 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ "__geoMeta", "from", - "to" + "to", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, "from": { "description": "The from point.", "type": "array", @@ -54982,560 +26446,372 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/GeoMeta" } } }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + { + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } - } + ] }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { + "TagDeclarator": { "type": "object", "required": [ "end", @@ -55567,3570 +26843,630 @@ "minItems": 32, "nullable": true } - }, - "nullable": true + } }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "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.", + "$ref": "#/components/schemas/SourceRange" } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", "type": "object", "required": [ "__meta", - "value" + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "value": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "plane" + ] }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -59158,6 +27494,7 @@ "minimum": 0.0 } }, + "schemaDefinitions": {}, "required": true }, { @@ -59183,4356 +27520,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "reduce_fn", - "type": "FunctionParam", - "schema": { - "type": "null" - }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -63560,138 +28046,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -63727,1993 +28103,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -65743,48 +28473,877 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "reduce_fn", + "type": "FunctionParam", + "schema": { + "type": "null" + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -65792,503 +29351,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -66314,6 +30826,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -66324,6 +30837,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66344,6 +30858,7 @@ "schema": { "type": "boolean" }, + "schemaDefinitions": {}, "required": true }, { @@ -66352,6 +30867,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66361,6 +30877,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66382,6 +30899,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66391,6 +30909,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66400,6 +30919,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66408,6 +30928,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66417,6 +30938,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66438,6 +30960,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66447,6 +30970,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66455,6 +30979,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66464,6 +30989,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66485,6 +31011,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66494,6 +31021,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66502,6 +31030,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66511,6 +31040,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66532,6 +31062,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66541,6 +31072,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66549,6 +31081,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66558,6 +31091,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66579,6 +31113,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66588,6 +31123,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -66596,6 +31132,7 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true } ], @@ -66605,6 +31142,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66628,6 +31166,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -66638,6 +31177,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -66696,6 +31236,7 @@ } } }, + "schemaDefinitions": {}, "required": true }, { @@ -66721,4388 +31262,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -71130,138 +31788,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -71297,1993 +31845,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -73313,48 +32215,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -73362,503 +33094,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -73884,6 +34569,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -73894,6 +34580,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -73928,471 +34615,344 @@ "description": "The tags of the paths you want to chamfer.", "type": "array", "items": { - "description": "A tag or a uuid of an edge.", - "anyOf": [ - { - "description": "A uuid of an edge.", + "$ref": "#/components/schemas/EdgeReference" + } + } + } + }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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" }, - { - "description": "A tag of an edge.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "tag": { + "description": "The tag.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -74422,2491 +34982,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -76929,169 +35010,1095 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -77100,6 +36107,1309 @@ "name": "tag", "type": "TagDeclarator", "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Solid", + "schema": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { "type": "object", "required": [ "end", @@ -77131,2703 +37441,881 @@ "minItems": 32, "nullable": true } - }, - "nullable": true + } }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Solid", - "schema": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -79875,6 +38363,7 @@ } } }, + "schemaDefinitions": {}, "required": true }, { @@ -79884,5214 +38373,16 @@ "description": "A sketch surface or a sketch.", "anyOf": [ { - "description": "A sketch type.", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" } ] }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "schemaDefinitions": { + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -85119,138 +38410,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -85286,1993 +38467,816 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -87302,48 +39306,419 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -87351,503 +39726,1915 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -87888,4388 +41675,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -92297,138 +42201,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -92464,1993 +42258,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -94480,48 +42628,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -94529,503 +43507,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -95052,6 +44983,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -95075,6 +45007,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -95085,6 +45018,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -95108,6 +45042,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -95129,6 +45064,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -95164,3539 +45100,29 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -98707,2185 +45133,7 @@ "array" ], "items": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "required": [ "type" @@ -100901,6 +45149,1071 @@ } ] }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true } ], @@ -100937,2491 +46250,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -103444,167 +46278,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -103615,2185 +46296,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -105809,6 +46312,1071 @@ } ] }, + "schemaDefinitions": { + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + } + }, "required": true }, "unpublished": false, @@ -105844,471 +47412,7 @@ "description": "The tags of the paths you want to fillet.", "type": "array", "items": { - "description": "A tag or a uuid of an edge.", - "anyOf": [ - { - "description": "A uuid of an edge.", - "type": "string", - "format": "uuid" - }, - { - "description": "A tag of an edge.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/EdgeReference" } }, "tolerance": { @@ -106320,6 +47424,343 @@ } } }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + }, "required": true }, { @@ -106345,2491 +47786,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -108852,169 +47814,1095 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -109023,6 +48911,1309 @@ "name": "tag", "type": "TagDeclarator", "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Solid", + "schema": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { "type": "object", "required": [ "end", @@ -109054,2703 +50245,881 @@ "minItems": 32, "nullable": true } - }, - "nullable": true + } }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Solid", - "schema": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -111779,6 +51148,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -111789,6 +51159,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -111812,6 +51183,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -111840,447 +51212,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -112295,6 +51534,7 @@ "type": "string", "format": "uuid" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -112323,447 +51563,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -112778,6 +51885,7 @@ "type": "string", "format": "uuid" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -112806,447 +51914,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -113261,6 +52236,7 @@ "type": "string", "format": "uuid" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -113309,6 +52285,7 @@ } } }, + "schemaDefinitions": {}, "required": true }, { @@ -113334,2491 +52311,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -115841,167 +52339,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -116032,2491 +53442,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -118539,167 +53470,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -118751,3539 +54594,29 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -122294,2185 +54627,7 @@ "array" ], "items": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "required": [ "type" @@ -124488,4373 +54643,478 @@ } ] }, - "required": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "__meta", - "value" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "value": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { + "from": { + "description": "The from point.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } - } - } - }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" + ] }, - "value": { - "description": "The paths in the sketch.", + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -128882,138 +55142,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -129049,1993 +55199,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -131065,48 +55569,921 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "sketch", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -131114,503 +56491,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -131635,6 +57965,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -131660,2491 +57991,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -134167,167 +58019,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -134358,2491 +59122,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -136865,167 +59150,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -137052,586 +60249,278 @@ "schema": { "type": "string" }, + "schemaDefinitions": {}, "required": true }, { "name": "options", "type": "ImportFormat", "schema": { - "description": "Import format specifier", - "oneOf": [ - { - "description": "Autodesk Filmbox (FBX) format", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fbx" - ] + "$ref": "#/components/schemas/ImportFormat", + "nullable": true + }, + "schemaDefinitions": { + "ImportFormat": { + "description": "Import format specifier", + "oneOf": [ + { + "description": "Autodesk Filmbox (FBX) format", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fbx" + ] + } } - } - }, - { - "description": "Binary glTF 2.0. We refer to this as glTF since that is how our customers refer to it, but this can also import binary glTF (glb).", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "gltf" - ] + }, + { + "description": "Binary glTF 2.0. We refer to this as glTF since that is how our customers refer to it, but this can also import binary glTF (glb).", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "gltf" + ] + } } - } - }, - { - "description": "Wavefront OBJ format.", - "type": "object", - "required": [ - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "obj" - ] - }, - "coords": { - "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", - "type": "object", - "required": [ - "forward", - "up" - ], - "properties": { - "forward": { - "description": "Axis the front face of a model looks along.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - }, - "up": { - "description": "Axis pointing up and away from a model.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - } + }, + { + "description": "Wavefront OBJ format.", + "type": "object", + "required": [ + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "obj" + ] }, - "nullable": true - }, - "units": { - "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", - "oneOf": [ - { - "description": "Centimeters ", - "type": "string", - "enum": [ - "cm" - ] - }, - { - "description": "Feet ", - "type": "string", - "enum": [ - "ft" - ] - }, - { - "description": "Inches ", - "type": "string", - "enum": [ - "in" - ] - }, - { - "description": "Meters ", - "type": "string", - "enum": [ - "m" - ] - }, - { - "description": "Millimeters ", - "type": "string", - "enum": [ - "mm" - ] - }, - { - "description": "Yards ", - "type": "string", - "enum": [ - "yd" - ] - } - ] - } - } - }, - { - "description": "The PLY Polygon File Format.", - "type": "object", - "required": [ - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ply" - ] - }, - "coords": { - "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", - "type": "object", - "required": [ - "forward", - "up" - ], - "properties": { - "forward": { - "description": "Axis the front face of a model looks along.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - }, - "up": { - "description": "Axis pointing up and away from a model.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - } + "coords": { + "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", + "$ref": "#/components/schemas/System", + "nullable": true }, - "nullable": true - }, - "units": { - "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", - "oneOf": [ - { - "description": "Centimeters ", - "type": "string", - "enum": [ - "cm" - ] - }, - { - "description": "Feet ", - "type": "string", - "enum": [ - "ft" - ] - }, - { - "description": "Inches ", - "type": "string", - "enum": [ - "in" - ] - }, - { - "description": "Meters ", - "type": "string", - "enum": [ - "m" - ] - }, - { - "description": "Millimeters ", - "type": "string", - "enum": [ - "mm" - ] - }, - { - "description": "Yards ", - "type": "string", - "enum": [ - "yd" - ] - } - ] + "units": { + "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", + "$ref": "#/components/schemas/UnitLength" + } } - } - }, - { - "description": "SolidWorks part (SLDPRT) format.", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sldprt" - ] - } - } - }, - { - "description": "ISO 10303-21 (STEP) format.", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "step" - ] - } - } - }, - { - "description": "ST**ereo**L**ithography format.", - "type": "object", - "required": [ - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "stl" - ] - }, - "coords": { - "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", - "type": "object", - "required": [ - "forward", - "up" - ], - "properties": { - "forward": { - "description": "Axis the front face of a model looks along.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - }, - "up": { - "description": "Axis pointing up and away from a model.", - "type": "object", - "required": [ - "axis", - "direction" - ], - "properties": { - "axis": { - "description": "Axis specifier.", - "oneOf": [ - { - "description": "'Y' axis.", - "type": "string", - "enum": [ - "y" - ] - }, - { - "description": "'Z' axis.", - "type": "string", - "enum": [ - "z" - ] - } - ] - }, - "direction": { - "description": "Specifies which direction the axis is pointing.", - "oneOf": [ - { - "description": "Increasing numbers.", - "type": "string", - "enum": [ - "positive" - ] - }, - { - "description": "Decreasing numbers.", - "type": "string", - "enum": [ - "negative" - ] - } - ] - } - } - } + }, + { + "description": "The PLY Polygon File Format.", + "type": "object", + "required": [ + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ply" + ] }, - "nullable": true - }, - "units": { - "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", - "oneOf": [ - { - "description": "Centimeters ", - "type": "string", - "enum": [ - "cm" - ] - }, - { - "description": "Feet ", - "type": "string", - "enum": [ - "ft" - ] - }, - { - "description": "Inches ", - "type": "string", - "enum": [ - "in" - ] - }, - { - "description": "Meters ", - "type": "string", - "enum": [ - "m" - ] - }, - { - "description": "Millimeters ", - "type": "string", - "enum": [ - "mm" - ] - }, - { - "description": "Yards ", - "type": "string", - "enum": [ - "yd" - ] - } - ] + "coords": { + "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", + "$ref": "#/components/schemas/System", + "nullable": true + }, + "units": { + "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", + "$ref": "#/components/schemas/UnitLength" + } } + }, + { + "description": "SolidWorks part (SLDPRT) format.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sldprt" + ] + } + } + }, + { + "description": "ISO 10303-21 (STEP) format.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "step" + ] + } + } + }, + { + "description": "ST**ereo**L**ithography format.", + "type": "object", + "required": [ + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "stl" + ] + }, + "coords": { + "description": "Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.", + "$ref": "#/components/schemas/System", + "nullable": true + }, + "units": { + "description": "The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.", + "$ref": "#/components/schemas/UnitLength" + } + } + } + ] + }, + "System": { + "description": "Co-ordinate system definition.\n\nThe `up` axis must be orthogonal to the `forward` axis.\n\nSee [cglearn.eu] for background reading.\n\n[cglearn.eu](https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1)", + "type": "object", + "required": [ + "forward", + "up" + ], + "properties": { + "forward": { + "description": "Axis the front face of a model looks along.", + "$ref": "#/components/schemas/AxisDirectionPair" + }, + "up": { + "description": "Axis pointing up and away from a model.", + "$ref": "#/components/schemas/AxisDirectionPair" } } - ], - "nullable": true + }, + "AxisDirectionPair": { + "description": "An [`Axis`] paired with a [`Direction`].", + "type": "object", + "required": [ + "axis", + "direction" + ], + "properties": { + "axis": { + "description": "Axis specifier.", + "$ref": "#/components/schemas/Axis" + }, + "direction": { + "description": "Specifies which direction the axis is pointing.", + "$ref": "#/components/schemas/Direction" + } + } + }, + "Axis": { + "description": "Co-ordinate axis specifier.\n\nSee [cglearn.eu] for background reading.\n\n[cglearn.eu]: https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1", + "oneOf": [ + { + "description": "'Y' axis.", + "type": "string", + "enum": [ + "y" + ] + }, + { + "description": "'Z' axis.", + "type": "string", + "enum": [ + "z" + ] + } + ] + }, + "Direction": { + "description": "Specifies the sign of a co-ordinate axis.", + "oneOf": [ + { + "description": "Increasing numbers.", + "type": "string", + "enum": [ + "positive" + ] + }, + { + "description": "Decreasing numbers.", + "type": "string", + "enum": [ + "negative" + ] + } + ] + }, + "UnitLength": { + "description": "The valid types of length units.", + "oneOf": [ + { + "description": "Centimeters ", + "type": "string", + "enum": [ + "cm" + ] + }, + { + "description": "Feet ", + "type": "string", + "enum": [ + "ft" + ] + }, + { + "description": "Inches ", + "type": "string", + "enum": [ + "in" + ] + }, + { + "description": "Meters ", + "type": "string", + "enum": [ + "m" + ] + }, + { + "description": "Millimeters ", + "type": "string", + "enum": [ + "mm" + ] + }, + { + "description": "Yards ", + "type": "string", + "enum": [ + "yd" + ] + } + ] + } }, "required": false } @@ -137663,28 +60552,36 @@ "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, + "schemaDefinitions": { + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + }, "required": true }, "unpublished": false, @@ -137712,6 +60609,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -137735,6 +60633,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -137745,6 +60644,7 @@ "type": "integer", "format": "int64" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -137782,3541 +60682,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -141329,6 +61784,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -141366,8112 +61822,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> line([5, 0], %)\n |> line([20, 5], %)\n |> line([0, lastSegY(%)], %)\n |> line([-15, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" - ] - }, - { - "name": "legAngX", - "summary": "Compute the angle of the given leg for x.", - "description": "", - "tags": [ - "utilities" - ], - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legAngX(5, 3)" - ] - }, - { - "name": "legAngY", - "summary": "Compute the angle of the given leg for y.", - "description": "", - "tags": [ - "utilities" - ], - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legAngY(5, 3)" - ] - }, - { - "name": "legLen", - "summary": "Compute the length of the given leg.", - "description": "", - "tags": [ - "utilities" - ], - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legLen(5, 3)" - ] - }, - { - "name": "line", - "summary": "Draw a line relative to the current origin to a specified (x, y) away", - "description": "from the current position.", - "tags": [], - "args": [ - { - "name": "delta", - "type": "[number]", - "schema": { - "type": "array", - "items": { - "type": "number", - "format": "double" + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] }, - "maxItems": 2, - "minItems": 2 - }, - "required": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } }, - "value": { - "description": "The paths in the sketch.", + "SourceRange": { "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -149499,138 +62348,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -149666,1993 +62405,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -151682,48 +62775,1094 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> line([5, 0], %)\n |> line([20, 5], %)\n |> line([0, lastSegY(%)], %)\n |> line([-15, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" + ] + }, + { + "name": "legAngX", + "summary": "Compute the angle of the given leg for x.", + "description": "", + "tags": [ + "utilities" + ], + "args": [ + { + "name": "hypotenuse", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legAngX(5, 3)" + ] + }, + { + "name": "legAngY", + "summary": "Compute the angle of the given leg for y.", + "description": "", + "tags": [ + "utilities" + ], + "args": [ + { + "name": "hypotenuse", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legAngY(5, 3)" + ] + }, + { + "name": "legLen", + "summary": "Compute the length of the given leg.", + "description": "", + "tags": [ + "utilities" + ], + "args": [ + { + "name": "hypotenuse", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legLen(5, 3)" + ] + }, + { + "name": "line", + "summary": "Draw a line relative to the current origin to a specified (x, y) away", + "description": "from the current position.", + "tags": [], + "args": [ + { + "name": "delta", + "type": "[number]", + "schema": { + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "schemaDefinitions": {}, + "required": true + }, + { + "name": "sketch", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -151731,503 +63870,2530 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -152257,6 +66423,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true }, { @@ -152282,4388 +66449,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -156691,138 +66975,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -156858,1993 +67032,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -158874,48 +67402,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -158923,503 +68281,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -159445,6 +69756,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -159455,6 +69767,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -159475,6 +69788,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Sketch" + } + }, + "schemaDefinitions": { + "Sketch": { "description": "A sketch is a collection of paths.", "type": "object", "required": [ @@ -159494,1597 +69812,52 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ "__geoMeta", "from", - "to" + "to", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, "from": { "description": "The from point.", "type": "array", @@ -161107,551 +69880,978 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + { + "description": "A face.", "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -161662,39 +70862,1107 @@ "name": "data", "type": "LoftData", "schema": { - "description": "Data for a loft.", - "type": "object", - "properties": { - "vDegree": { - "description": "Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified.", - "type": "integer", - "format": "uint32", - "minimum": 1.0, - "nullable": true - }, - "bezApproximateRational": { - "description": "Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary.", - "default": null, - "type": "boolean", - "nullable": true - }, - "baseCurveIndex": { - "description": "This can be set to override the automatically determined topological base curve, which is usually the first section encountered.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0.0, - "nullable": true - }, - "tolerance": { - "description": "Tolerance for the loft operation.", - "default": null, - "type": "number", - "format": "double", - "nullable": true + "$ref": "#/components/schemas/LoftData", + "nullable": true + }, + "schemaDefinitions": { + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, - "nullable": true + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "LoftData": { + "description": "Data for a loft.", + "type": "object", + "properties": { + "vDegree": { + "description": "Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified.", + "type": "integer", + "format": "uint32", + "minimum": 1.0, + "nullable": true + }, + "bezApproximateRational": { + "description": "Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary.", + "default": null, + "type": "boolean", + "nullable": true + }, + "baseCurveIndex": { + "description": "This can be set to override the automatically determined topological base curve, which is usually the first section encountered.", + "default": null, + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "nullable": true + }, + "tolerance": { + "description": "Tolerance for the loft operation.", + "default": null, + "type": "number", + "format": "double", + "nullable": true + } + } + } }, "required": false } @@ -161722,2491 +71990,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -164229,167 +72018,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -164419,6 +73120,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -164428,6 +73130,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -164438,6 +73141,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164461,6 +73165,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -164471,6 +73176,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164494,6 +73200,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -164504,6 +73211,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164527,6 +73235,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164553,6 +73262,7 @@ "format": "double" } }, + "schemaDefinitions": {}, "required": true } ], @@ -164563,6 +73273,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164589,6 +73300,7 @@ "format": "double" } }, + "schemaDefinitions": {}, "required": true } ], @@ -164599,6 +73311,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -164625,546 +73338,428 @@ "properties": { "axis": { "description": "Axis to use as mirror.", - "anyOf": [ - { - "description": "Axis and origin.", - "oneOf": [ - { - "description": "X-axis.", - "type": "string", - "enum": [ - "X" - ] - }, - { - "description": "Y-axis.", - "type": "string", - "enum": [ - "Y" - ] - }, - { - "description": "Flip the X-axis.", - "type": "string", - "enum": [ - "-X" - ] - }, - { - "description": "Flip the Y-axis.", - "type": "string", - "enum": [ - "-Y" - ] - }, - { - "type": "object", - "required": [ - "custom" - ], - "properties": { - "custom": { - "type": "object", - "required": [ - "axis", - "origin" - ], - "properties": { - "axis": { - "description": "The axis.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "origin": { - "description": "The origin.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "$ref": "#/components/schemas/AxisOrEdgeReference" + } + } + }, + "schemaDefinitions": { + "AxisOrEdgeReference": { + "description": "Axis or tagged edge.", + "anyOf": [ + { + "description": "Axis and origin.", + "$ref": "#/components/schemas/AxisAndOrigin" + }, + { + "description": "Tagged edge.", + "$ref": "#/components/schemas/EdgeReference" + } + ] + }, + "AxisAndOrigin": { + "description": "Axis and origin.", + "oneOf": [ + { + "description": "X-axis.", + "type": "string", + "enum": [ + "X" + ] + }, + { + "description": "Y-axis.", + "type": "string", + "enum": [ + "Y" + ] + }, + { + "description": "Flip the X-axis.", + "type": "string", + "enum": [ + "-X" + ] + }, + { + "description": "Flip the Y-axis.", + "type": "string", + "enum": [ + "-Y" + ] + }, + { + "type": "object", + "required": [ + "custom" + ], + "properties": { + "custom": { + "type": "object", + "required": [ + "axis", + "origin" + ], + "properties": { + "axis": { + "description": "The axis.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "additionalProperties": false - } - ] - }, - { - "description": "Tagged edge.", - "anyOf": [ - { - "description": "A uuid of an edge.", - "type": "string", - "format": "uuid" - }, - { - "description": "A tag of an edge.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" + "origin": { + "description": "The origin.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "maxItems": 2, + "minItems": 2 } } - ] + } + }, + "additionalProperties": false + } + ] + }, + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } - ] + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } } }, @@ -165203,3539 +73798,29 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -168746,2185 +73831,7 @@ "array" ], "items": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "required": [ "type" @@ -170940,6 +73847,1169 @@ } ] }, + "schemaDefinitions": { + "AxisOrEdgeReference": { + "description": "Axis or tagged edge.", + "anyOf": [ + { + "description": "Axis and origin.", + "$ref": "#/components/schemas/AxisAndOrigin" + }, + { + "description": "Tagged edge.", + "$ref": "#/components/schemas/EdgeReference" + } + ] + }, + "AxisAndOrigin": { + "description": "Axis and origin.", + "oneOf": [ + { + "description": "X-axis.", + "type": "string", + "enum": [ + "X" + ] + }, + { + "description": "Y-axis.", + "type": "string", + "enum": [ + "Y" + ] + }, + { + "description": "Flip the X-axis.", + "type": "string", + "enum": [ + "-X" + ] + }, + { + "description": "Flip the Y-axis.", + "type": "string", + "enum": [ + "-Y" + ] + }, + { + "type": "object", + "required": [ + "custom" + ], + "properties": { + "custom": { + "type": "object", + "required": [ + "axis", + "origin" + ], + "properties": { + "axis": { + "description": "The axis.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "origin": { + "description": "The origin.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "additionalProperties": false + } + ] + }, + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true } ], @@ -170949,6 +75019,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Sketch" + } + }, + "schemaDefinitions": { + "Sketch": { "description": "A sketch is a collection of paths.", "type": "object", "required": [ @@ -170968,1597 +75043,52 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ "__geoMeta", "from", - "to" + "to", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, "from": { "description": "The from point.", "type": "array", @@ -172581,551 +75111,978 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + { + "description": "A face.", "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -173156,6 +76113,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -173220,6 +76178,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -173229,6 +76188,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -173298,95 +76258,19 @@ "properties": { "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" } } } @@ -173395,6 +76279,30 @@ } ] }, + "schemaDefinitions": { + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + }, "required": true }, "unpublished": false, @@ -173427,9 +76335,7 @@ "properties": { "repetitions": { "description": "The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 + "$ref": "#/components/schemas/Uint" }, "center": { "description": "The center about which to make the pattern. This is a 2D vector.", @@ -173452,6 +76358,13 @@ } } }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, "required": true }, { @@ -173487,3539 +76400,29 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -177030,2185 +76433,7 @@ "array" ], "items": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "required": [ "type" @@ -179224,6 +76449,1076 @@ } ] }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true } ], @@ -179233,6 +77528,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Sketch" + } + }, + "schemaDefinitions": { + "Sketch": { "description": "A sketch is a collection of paths.", "type": "object", "required": [ @@ -179252,1597 +77552,52 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ "__geoMeta", "from", - "to" + "to", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, "from": { "description": "The from point.", "type": "array", @@ -180865,551 +77620,978 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + { + "description": "A face.", "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -181444,9 +78626,7 @@ "properties": { "repetitions": { "description": "The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 + "$ref": "#/components/schemas/Uint" }, "axis": { "description": "The axis around which to make the pattern. This is a 3D vector.", @@ -181479,6 +78659,13 @@ } } }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, "required": true }, { @@ -181514,2491 +78701,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -184021,167 +78729,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -184192,2185 +78747,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -186386,6 +78763,1076 @@ } ] }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + } + }, "required": true } ], @@ -186395,6 +79842,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Solid" + } + }, + "schemaDefinitions": { + "Solid": { "description": "An solid is a collection of extrude surfaces.", "type": "object", "required": [ @@ -186414,1980 +79866,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -188410,170 +79894,1020 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -188604,9 +80938,7 @@ "properties": { "repetitions": { "description": "The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 + "$ref": "#/components/schemas/Uint" }, "distance": { "description": "The distance between each repetition. This can also be referred to as spacing.", @@ -188625,6 +80957,13 @@ } } }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, "required": true }, { @@ -188660,3539 +80999,29 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -192203,2185 +81032,7 @@ "array" ], "items": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "required": [ "type" @@ -194397,6 +81048,1076 @@ } ] }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true } ], @@ -194406,6 +82127,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Sketch" + } + }, + "schemaDefinitions": { + "Sketch": { "description": "A sketch is a collection of paths.", "type": "object", "required": [ @@ -194425,1597 +82151,52 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ "__geoMeta", "from", - "to" + "to", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, "from": { "description": "The from point.", "type": "array", @@ -196038,551 +82219,978 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + { + "description": "A face.", "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -196615,9 +83223,7 @@ "properties": { "repetitions": { "description": "The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 + "$ref": "#/components/schemas/Uint" }, "distance": { "description": "The distance between each repetition. This can also be referred to as spacing.", @@ -196636,6 +83242,13 @@ } } }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, "required": true }, { @@ -196671,2491 +83284,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -199178,167 +83312,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -199349,2185 +83330,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -201543,6 +83346,1076 @@ } ] }, + "schemaDefinitions": { + "Uint": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + } + }, "required": true } ], @@ -201552,6 +84425,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Solid" + } + }, + "schemaDefinitions": { + "Solid": { "description": "An solid is a collection of extrude surfaces.", "type": "object", "required": [ @@ -201571,1980 +84449,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -203567,170 +84477,1020 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -203755,6 +85515,7 @@ "format": "uint32", "minimum": 0.0 }, + "schemaDefinitions": {}, "required": true }, { @@ -203763,6 +85524,7 @@ "schema": { "type": "null" }, + "schemaDefinitions": {}, "required": true }, { @@ -203798,2491 +85560,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -206305,167 +85588,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -206476,2185 +85606,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -208670,6 +85622,1071 @@ } ] }, + "schemaDefinitions": { + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + } + }, "required": true } ], @@ -208679,6 +86696,11 @@ "schema": { "type": "array", "items": { + "$ref": "#/components/schemas/Solid" + } + }, + "schemaDefinitions": { + "Solid": { "description": "An solid is a collection of extrude surfaces.", "type": "object", "required": [ @@ -208698,1980 +86720,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -210694,170 +86748,1020 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -210887,6 +87791,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -210924,6 +87829,7 @@ } } }, + "schemaDefinitions": {}, "required": true } ], @@ -210939,6 +87845,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -210962,6 +87869,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -210971,6 +87879,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -210981,6 +87890,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -211018,3541 +87928,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -214570,6 +89035,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -214607,3541 +89073,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -218154,6 +90175,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -218191,3541 +90213,1096 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -221738,6 +91315,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -221761,6 +91339,7 @@ "type": "integer", "format": "int64" }, + "schemaDefinitions": {}, "required": true }, { @@ -221770,6 +91349,7 @@ "type": "integer", "format": "int64" }, + "schemaDefinitions": {}, "required": true } ], @@ -221780,6 +91360,7 @@ "type": "integer", "format": "int64" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -221815,546 +91396,7 @@ }, "axis": { "description": "Axis of revolution.", - "anyOf": [ - { - "description": "Axis and origin.", - "oneOf": [ - { - "description": "X-axis.", - "type": "string", - "enum": [ - "X" - ] - }, - { - "description": "Y-axis.", - "type": "string", - "enum": [ - "Y" - ] - }, - { - "description": "Flip the X-axis.", - "type": "string", - "enum": [ - "-X" - ] - }, - { - "description": "Flip the Y-axis.", - "type": "string", - "enum": [ - "-Y" - ] - }, - { - "type": "object", - "required": [ - "custom" - ], - "properties": { - "custom": { - "type": "object", - "required": [ - "axis", - "origin" - ], - "properties": { - "axis": { - "description": "The axis.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "origin": { - "description": "The origin.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "additionalProperties": false - } - ] - }, - { - "description": "Tagged edge.", - "anyOf": [ - { - "description": "A uuid of an edge.", - "type": "string", - "format": "uuid" - }, - { - "description": "A tag of an edge.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - } - ] + "$ref": "#/components/schemas/AxisOrEdgeReference" }, "tolerance": { "description": "Tolerance for the revolve operation.", @@ -222365,6 +91407,427 @@ } } }, + "schemaDefinitions": { + "AxisOrEdgeReference": { + "description": "Axis or tagged edge.", + "anyOf": [ + { + "description": "Axis and origin.", + "$ref": "#/components/schemas/AxisAndOrigin" + }, + { + "description": "Tagged edge.", + "$ref": "#/components/schemas/EdgeReference" + } + ] + }, + "AxisAndOrigin": { + "description": "Axis and origin.", + "oneOf": [ + { + "description": "X-axis.", + "type": "string", + "enum": [ + "X" + ] + }, + { + "description": "Y-axis.", + "type": "string", + "enum": [ + "Y" + ] + }, + { + "description": "Flip the X-axis.", + "type": "string", + "enum": [ + "-X" + ] + }, + { + "description": "Flip the Y-axis.", + "type": "string", + "enum": [ + "-Y" + ] + }, + { + "type": "object", + "required": [ + "custom" + ], + "properties": { + "custom": { + "type": "object", + "required": [ + "axis", + "origin" + ], + "properties": { + "axis": { + "description": "The axis.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "origin": { + "description": "The origin.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "additionalProperties": false + } + ] + }, + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + }, "required": true }, { @@ -222390,3541 +91853,1194 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "AxisOrEdgeReference": { + "description": "Axis or tagged edge.", + "anyOf": [ + { + "description": "Axis and origin.", + "$ref": "#/components/schemas/AxisAndOrigin" + }, + { + "description": "Tagged edge.", + "$ref": "#/components/schemas/EdgeReference" + } + ] + }, + "AxisAndOrigin": { + "description": "Axis and origin.", + "oneOf": [ + { + "description": "X-axis.", + "type": "string", + "enum": [ + "X" + ] + }, + { + "description": "Y-axis.", + "type": "string", + "enum": [ + "Y" + ] + }, + { + "description": "Flip the X-axis.", + "type": "string", + "enum": [ + "-X" + ] + }, + { + "description": "Flip the Y-axis.", + "type": "string", + "enum": [ + "-Y" + ] + }, + { "type": "object", "required": [ - "sourceRange" + "custom" ], "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "custom": { + "type": "object", + "required": [ + "axis", + "origin" + ], + "properties": { + "axis": { + "description": "The axis.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "origin": { + "description": "The origin.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + } + } } + }, + "additionalProperties": false + } + ] + }, + "EdgeReference": { + "description": "A tag or a uuid of an edge.", + "anyOf": [ + { + "description": "A uuid of an edge.", + "type": "string", + "format": "uuid" + }, + { + "description": "A tag of an edge.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -225953,2491 +93069,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -228460,167 +93097,1079 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true } } } @@ -228660,447 +94209,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -229115,6 +94531,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -229143,447 +94560,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -229598,6 +94882,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -229626,447 +94911,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -230081,6 +95233,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -230109,447 +95262,314 @@ "type": "string" }, "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, + "$ref": "#/components/schemas/TagEngineInfo", "nullable": true }, "__meta": { "type": "array", "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ - "sourceRange" + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -230564,6 +95584,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -230598,484 +95619,360 @@ "description": "The faces you want removed.", "type": "array", "items": { - "description": "A tag for a face.", - "anyOf": [ - { - "oneOf": [ - { - "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "start" - ] - }, - { - "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "end" - ] - } + "$ref": "#/components/schemas/FaceTag" + } + } + } + }, + "schemaDefinitions": { + "FaceTag": { + "description": "A tag for a face.", + "anyOf": [ + { + "$ref": "#/components/schemas/StartOrEnd" + }, + { + "description": "A tag for the face.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "StartOrEnd": { + "oneOf": [ + { + "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "start" + ] + }, + { + "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "end" + ] + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" ] }, - { - "description": "A tag for the face.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } @@ -231115,2491 +96012,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -233622,167 +96040,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -233793,2185 +96058,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -235987,6 +96074,1101 @@ } ] }, + "schemaDefinitions": { + "FaceTag": { + "description": "A tag for a face.", + "anyOf": [ + { + "$ref": "#/components/schemas/StartOrEnd" + }, + { + "description": "A tag for the face.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "StartOrEnd": { + "oneOf": [ + { + "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "start" + ] + }, + { + "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "end" + ] + } + ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true } ], @@ -236023,2491 +97205,12 @@ "description": "The extrude surfaces.", "type": "array", "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] + "$ref": "#/components/schemas/ExtrudeSurface" } }, "sketch": { "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "$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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Sketch" }, "height": { "description": "The height of the solid.", @@ -238530,167 +97233,14 @@ "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] + "$ref": "#/components/schemas/EdgeCut" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -238701,2185 +97251,7 @@ "array" ], "items": { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "required": [ "type" @@ -240895,110 +97267,677 @@ } ] }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Remove the end face for the extrusion.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %)\n |> close(%)\n |> extrude(6, %)\n\n// Remove the end face for the extrusion.\nshell({ faces: ['end'], thickness: 0.25 }, firstSketch)", - "// Remove the start face for the extrusion.\nconst firstSketch = startSketchOn('-XZ')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %)\n |> close(%)\n |> extrude(6, %)\n\n// Remove the start face for the extrusion.\nshell({ faces: ['start'], thickness: 0.25 }, firstSketch)", - "// Remove a tagged face and the end face for the extrusion.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %, $myTag)\n |> close(%)\n |> extrude(6, %)\n\n// Remove a tagged face for the extrusion.\nshell({ faces: [myTag], thickness: 0.25 }, firstSketch)", - "// Remove multiple faces at once.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %, $myTag)\n |> close(%)\n |> extrude(6, %)\n\n// Remove a tagged face and the end face for the extrusion.\nshell({\n faces: [myTag, 'end'],\n thickness: 0.25\n}, firstSketch)", - "// Shell a sketch on face.\nlet size = 100\nconst case = startSketchOn('-XZ')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell({ faces: ['start'], thickness: 5 }, case)", - "// Shell a sketch on face object on the end face.\nlet size = 100\nconst case = startSketchOn('XY')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell({ faces: ['end'], thickness: 5 }, thing1)", - "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nlet size = 100\nconst case = startSketchOn('XY')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell({ faces: ['end'], thickness: 5 }, [thing1, thing2])" - ] - }, - { - "name": "sin", - "summary": "Compute the sine of a number (in radians).", - "description": "", - "tags": [ - "math" - ], - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "type": "number", - "format": "double" + "schemaDefinitions": { + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({\n angle: 50,\n length: 15 / sin(toDegrees(135))\n }, %)\n |> yLineTo(0, %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" - ] - }, - { - "name": "sqrt", - "summary": "Compute the square root of a number.", - "description": "", - "tags": [ - "math" - ], - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "type": "number", - "format": "double" + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } }, - "required": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "type": "number", - "format": "double" - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({ angle: 50, length: sqrt(2500) }, %)\n |> yLineTo(0, %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" - ] - }, - { - "name": "startProfileAt", - "summary": "Start a new profile at a given point.", - "description": "", - "tags": [], - "args": [ - { - "name": "to", - "type": "[number]", - "schema": { + "SourceRange": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint", + "minimum": 0.0 }, "maxItems": 2, "minItems": 2 }, - "required": true - }, - { - "name": "sketch_surface", - "type": "SketchSurface", - "schema": { + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { "description": "A sketch type.", "oneOf": [ { @@ -241027,138 +97966,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -241194,2287 +98023,3133 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + } + }, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Remove the end face for the extrusion.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %)\n |> close(%)\n |> extrude(6, %)\n\n// Remove the end face for the extrusion.\nshell({ faces: ['end'], thickness: 0.25 }, firstSketch)", + "// Remove the start face for the extrusion.\nconst firstSketch = startSketchOn('-XZ')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %)\n |> close(%)\n |> extrude(6, %)\n\n// Remove the start face for the extrusion.\nshell({ faces: ['start'], thickness: 0.25 }, firstSketch)", + "// Remove a tagged face and the end face for the extrusion.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %, $myTag)\n |> close(%)\n |> extrude(6, %)\n\n// Remove a tagged face for the extrusion.\nshell({ faces: [myTag], thickness: 0.25 }, firstSketch)", + "// Remove multiple faces at once.\nconst firstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line([24, 0], %)\n |> line([0, -24], %)\n |> line([-24, 0], %, $myTag)\n |> close(%)\n |> extrude(6, %)\n\n// Remove a tagged face and the end face for the extrusion.\nshell({\n faces: [myTag, 'end'],\n thickness: 0.25\n}, firstSketch)", + "// Shell a sketch on face.\nlet size = 100\nconst case = startSketchOn('-XZ')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell({ faces: ['start'], thickness: 5 }, case)", + "// Shell a sketch on face object on the end face.\nlet size = 100\nconst case = startSketchOn('XY')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell({ faces: ['end'], thickness: 5 }, thing1)", + "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nlet size = 100\nconst case = startSketchOn('XY')\n |> startProfileAt([-size, -size], %)\n |> line([2 * size, 0], %)\n |> line([0, 2 * size], %)\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(65, %)\n\nconst thing1 = startSketchOn(case, 'end')\n |> circle({\n center: [-size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\nconst thing2 = startSketchOn(case, 'end')\n |> circle({\n center: [size / 2, -size / 2],\n radius: 25\n }, %)\n |> extrude(50, %)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell({ faces: ['end'], thickness: 5 }, [thing1, thing2])" + ] + }, + { + "name": "sin", + "summary": "Compute the sine of a number (in radians).", + "description": "", + "tags": [ + "math" + ], + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({\n angle: 50,\n length: 15 / sin(toDegrees(135))\n }, %)\n |> yLineTo(0, %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" + ] + }, + { + "name": "sqrt", + "summary": "Compute the square root of a number.", + "description": "", + "tags": [ + "math" + ], + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "schemaDefinitions": {}, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "const exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({ angle: 50, length: sqrt(2500) }, %)\n |> yLineTo(0, %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" + ] + }, + { + "name": "startProfileAt", + "summary": "Start a new profile at a given point.", + "description": "", + "tags": [], + "args": [ + { + "name": "to", + "type": "[number]", + "schema": { + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "schemaDefinitions": {}, + "required": true + }, + { + "name": "sketch_surface", + "type": "SketchSurface", + "schema": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "schemaDefinitions": { + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true }, { "name": "tag", "type": "TagDeclarator", "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { "type": "object", "required": [ "end", @@ -243506,3570 +101181,630 @@ "minItems": 32, "nullable": true } - }, - "nullable": true + } }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "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.", + "$ref": "#/components/schemas/SourceRange" } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", "type": "object", "required": [ "__meta", - "value" + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "value": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "plane" + ] }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" } } } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -247100,6 +101835,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true } ], @@ -247126,785 +101862,1966 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "const exampleSketch = startSketchAt([0, 0])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)", + "const exampleSketch = startSketchAt([10, 10])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)", + "const exampleSketch = startSketchAt([-10, 23])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" + ] + }, + { + "name": "startSketchOn", + "summary": "Start a new 2-dimensional sketch on a specific plane or face.", + "description": "", + "tags": [], + "args": [ + { + "name": "data", + "type": "SketchData", + "schema": { + "description": "Data for start sketch on. You can start a sketch on a plane or an solid.", + "anyOf": [ + { + "$ref": "#/components/schemas/PlaneData" + }, + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "schemaDefinitions": { + "PlaneData": { + "description": "Data for a plane.", + "oneOf": [ + { + "description": "The XY plane.", + "type": "string", + "enum": [ + "XY" + ] + }, + { + "description": "The opposite side of the XY plane.", + "type": "string", + "enum": [ + "-XY" + ] + }, + { + "description": "The XZ plane.", + "type": "string", + "enum": [ + "XZ" + ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { + "type": "object", + "required": [ + "origin", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + } + } + } + }, + "additionalProperties": false + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -247932,138 +103849,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -248099,1993 +103906,65 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -250115,2918 +103994,144 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true } } } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + ] } - } - }, - "required": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "const exampleSketch = startSketchAt([0, 0])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)", - "const exampleSketch = startSketchAt([10, 10])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)", - "const exampleSketch = startSketchAt([-10, 23])\n |> line([10, 0], %)\n |> line([0, 10], %)\n |> line([-10, 0], %)\n |> close(%)\n\nconst example = extrude(5, exampleSketch)" - ] - }, - { - "name": "startSketchOn", - "summary": "Start a new 2-dimensional sketch on a specific plane or face.", - "description": "", - "tags": [], - "args": [ - { - "name": "data", - "type": "SketchData", - "schema": { - "description": "Data for start sketch on. You can start a sketch on a plane or an solid.", - "anyOf": [ - { - "description": "Data for a plane.", - "oneOf": [ - { - "description": "The XY plane.", - "type": "string", - "enum": [ - "XY" - ] - }, - { - "description": "The opposite side of the XY plane.", - "type": "string", - "enum": [ - "-XY" - ] - }, - { - "description": "The XZ plane.", - "type": "string", - "enum": [ - "XZ" - ] - }, - { - "description": "The opposite side of the XZ plane.", - "type": "string", - "enum": [ - "-XZ" - ] - }, - { - "description": "The YZ plane.", - "type": "string", - "enum": [ - "YZ" - ] - }, - { - "description": "The opposite side of the YZ plane.", - "type": "string", - "enum": [ - "-YZ" - ] - }, - { - "description": "A defined plane.", - "type": "object", - "required": [ - "plane" - ], - "properties": { - "plane": { - "type": "object", - "required": [ - "origin", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - } - } - } - }, - "additionalProperties": false - } - ] - }, - { - "description": "An solid is a collection of extrude surfaces.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] }, "required": true }, @@ -253034,485 +104139,1187 @@ "name": "tag", "type": "FaceTag", "schema": { - "description": "A tag for a face.", - "anyOf": [ - { - "oneOf": [ - { - "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "start" - ] - }, - { - "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "end" - ] - } - ] - }, - { - "description": "A tag for the face.", - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/FaceTag", + "nullable": true + }, + "schemaDefinitions": { + "PlaneData": { + "description": "Data for a plane.", + "oneOf": [ + { + "description": "The XY plane.", + "type": "string", + "enum": [ + "XY" + ] + }, + { + "description": "The opposite side of the XY plane.", + "type": "string", + "enum": [ + "-XY" + ] + }, + { + "description": "The XZ plane.", + "type": "string", + "enum": [ + "XZ" + ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { "type": "object", "required": [ - "sourceRange" + "origin", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" } } } + }, + "additionalProperties": false + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } } - ], - "nullable": true + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + }, + "FaceTag": { + "description": "A tag for a face.", + "anyOf": [ + { + "$ref": "#/components/schemas/StartOrEnd" + }, + { + "description": "A tag for the face.", + "$ref": "#/components/schemas/TagIdentifier" + } + ] + }, + "StartOrEnd": { + "oneOf": [ + { + "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "start" + ] + }, + { + "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "end" + ] + } + ] + } }, "required": false } @@ -253549,138 +105356,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -253716,2281 +105413,1095 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "$ref": "#/components/schemas/Solid" - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, + "schemaDefinitions": { + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, "required": true }, "unpublished": false, @@ -256017,6 +106528,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -256027,6 +106539,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -256068,6 +106581,7 @@ } ] }, + "schemaDefinitions": {}, "required": true }, { @@ -256093,4388 +106607,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -260502,138 +107133,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -260669,1993 +107190,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -262685,48 +107560,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -262734,503 +108439,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -263259,6 +109917,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true }, { @@ -263284,4388 +109943,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -267693,138 +110469,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -267860,1993 +110526,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -269876,48 +110896,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -269925,503 +111775,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -270450,6 +113253,7 @@ "maxItems": 2, "minItems": 2 }, + "schemaDefinitions": {}, "required": true }, { @@ -270475,4388 +113279,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -274884,138 +113805,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -275051,1993 +113862,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -277067,48 +114232,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -277116,503 +115111,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -277638,6 +116586,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -277661,6 +116610,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -277671,6 +116621,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -277694,6 +116645,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true } ], @@ -277704,6 +116656,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, @@ -277725,6 +116678,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -277750,4388 +116704,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -282159,138 +117230,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -282326,1993 +117287,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -284342,48 +117657,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -284391,503 +118536,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -284911,6 +120009,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -284936,4388 +120035,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -289345,138 +120561,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -289512,1993 +120618,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -291528,48 +120988,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -291577,503 +121867,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -292097,6 +123340,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -292122,4388 +123366,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -296531,138 +123892,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -296698,1993 +123949,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -298714,48 +124319,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -298763,503 +125198,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -299283,6 +126671,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, { @@ -299308,4388 +126697,505 @@ "description": "The paths in the sketch.", "type": "array", "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] + "$ref": "#/components/schemas/Path" } }, "on": { "description": "What the sketch is on (can be a plane or a face).", - "oneOf": [ - { - "description": "A plane.", - "type": "object", - "required": [ - "__meta", - "id", - "origin", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] - }, - "origin": { - "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "__meta", - "id", - "solid", - "type", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "yAxis": { - "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "zAxis": { - "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "solid": { - "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - ] + "$ref": "#/components/schemas/SketchSurface" }, "start": { "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } + "$ref": "#/components/schemas/BasePath" }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } }, - "required": true - }, - { - "name": "tag", - "type": "TagDeclarator", - "schema": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "required": false - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "description": "A sketch is a collection of paths.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "description": "A plane.", @@ -303717,138 +127223,28 @@ "format": "uuid" }, "value": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - } - ] + "$ref": "#/components/schemas/PlaneType" }, "origin": { "description": "Origin of the plane.", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "xAxis": { "description": "What should the plane’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the plane’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } @@ -303884,1993 +127280,347 @@ }, "xAxis": { "description": "What should the face’s X axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "yAxis": { "description": "What should the face’s Y axis be?", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "zAxis": { "description": "The z-axis (normal).", - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } + "$ref": "#/components/schemas/Point3d" }, "solid": { "description": "The solid the face is on.", - "type": "object", - "required": [ - "__meta", - "height", - "id", - "sketch", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ] - } - }, - "sketch": { - "description": "The sketch.", - "type": "object", - "required": [ - "__meta", - "id", - "on", - "start", - "value" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - ] - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "$ref": "#/components/schemas/SketchSurface" - }, - "start": { - "description": "The starting path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } - }, - "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": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - } - } - } - ] - } - }, - "__meta": { - "description": "Metadata.", - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/Solid" }, "__meta": { "type": "array", "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } + "$ref": "#/components/schemas/Metadata" } } } } ] }, - "start": { - "description": "The starting path.", + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -305900,48 +127650,878 @@ }, "tag": { "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, + "$ref": "#/components/schemas/TagDeclarator", "nullable": true }, "__geoMeta": { "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "sourceRange" + "radius", + "type" ], "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": true + }, + { + "name": "tag", + "type": "TagDeclarator", + "schema": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, "id": { "description": "The id of the geometry.", "type": "string", @@ -305949,503 +128529,1456 @@ }, "sourceRange": { "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" } } } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] + } + }, + "required": false + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, "tags": { "description": "Tag identifiers that have been declared in this sketch.", "type": "object", "additionalProperties": { - "type": "object", - "required": [ - "__meta", - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "info": { - "description": "Engine information for a tag.", - "type": "object", - "required": [ - "id", - "sketch" - ], - "properties": { - "id": { - "description": "The id of the tagged object.", - "type": "string", - "format": "uuid" - }, - "sketch": { - "description": "The sketch the tag is on.", - "type": "string", - "format": "uuid" - }, - "path": { - "description": "The path the tag is on.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to" - ], - "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 - }, - "tag": { - "description": "The tag of the path.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - }, - "nullable": true - }, - "surface": { - "description": "The surface information for the tag.", - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - { - "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.", - "type": "object", - "required": [ - "end", - "start", - "value" - ], - "properties": { - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - }, - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - ], - "nullable": true - } - }, - "nullable": true - }, - "__meta": { - "type": "array", - "items": { - "description": "Metadata.", - "type": "object", - "required": [ - "sourceRange" - ], - "properties": { - "sourceRange": { - "description": "The source range.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 2, - "minItems": 2 - } - } - } - } - } + "$ref": "#/components/schemas/TagIdentifier" } }, "__meta": { "description": "Metadata.", "type": "array", "items": { - "description": "Metadata.", + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "schemaDefinitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", "type": "object", "required": [ - "sourceRange" + "__geoMeta", + "from", + "to", + "type" ], "properties": { - "sourceRange": { - "description": "The source range.", + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "type": "number", + "format": "double" }, "maxItems": 2, "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$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" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } } + }, + "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.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "$ref": "#/components/schemas/Point3d" + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "$ref": "#/components/schemas/Point3d" + }, + "zAxis": { + "description": "The z-axis (normal).", + "$ref": "#/components/schemas/Point3d" + }, + "solid": { + "description": "The solid the face is on.", + "$ref": "#/components/schemas/Solid" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "$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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$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.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "$ref": "#/components/schemas/SourceRange" + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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).", + "$ref": "#/components/schemas/SketchSurface" + }, + "start": { + "description": "The starting path.", + "$ref": "#/components/schemas/BasePath" + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "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 + }, + "tag": { + "description": "The tag of the path.", + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "$ref": "#/components/schemas/GeoMeta" + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "$ref": "#/components/schemas/TagEngineInfo", + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "$ref": "#/components/schemas/BasePath", + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "$ref": "#/components/schemas/ExtrudeSurface", + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "$ref": "#/components/schemas/TagDeclarator", + "nullable": true + } + } + } + ] } }, "required": true @@ -306471,6 +130004,7 @@ "type": "number", "format": "double" }, + "schemaDefinitions": {}, "required": true }, "unpublished": false, diff --git a/docs/kcl/types/AngledLineData.md b/docs/kcl/types/AngledLineData.md index 53fa01984..8b75d8b48 100644 --- a/docs/kcl/types/AngledLineData.md +++ b/docs/kcl/types/AngledLineData.md @@ -9,7 +9,6 @@ Data to draw an angled line. - **This schema accepts any of the following:** An angle and length with explicitly named parameters @@ -23,12 +22,9 @@ An angle and length with explicitly named parameters - ---- An angle and length given as a pair - - **Type:** `array` `[number, number]` diff --git a/docs/kcl/types/AngledLineThatIntersectsData.md b/docs/kcl/types/AngledLineThatIntersectsData.md index cab70be74..d1cfd0422 100644 --- a/docs/kcl/types/AngledLineThatIntersectsData.md +++ b/docs/kcl/types/AngledLineThatIntersectsData.md @@ -6,8 +6,6 @@ layout: manual Data for drawing an angled line that intersects with a given line. - - **Type:** `object` diff --git a/docs/kcl/types/AngledLineToData.md b/docs/kcl/types/AngledLineToData.md index 906937461..bd1a7fb12 100644 --- a/docs/kcl/types/AngledLineToData.md +++ b/docs/kcl/types/AngledLineToData.md @@ -6,8 +6,6 @@ layout: manual Data to draw an angled line to a point. - - **Type:** `object` diff --git a/docs/kcl/types/ArcData.md b/docs/kcl/types/ArcData.md index d430d63a5..c39d8378c 100644 --- a/docs/kcl/types/ArcData.md +++ b/docs/kcl/types/ArcData.md @@ -9,13 +9,10 @@ Data to draw an arc. - **This schema accepts any of the following:** Angles and radius with an optional tag. - - **Type:** `object` @@ -34,8 +31,6 @@ Angles and radius with an optional tag. ---- Center, to and radius with an optional tag. - - **Type:** `object` diff --git a/docs/kcl/types/Axis.md b/docs/kcl/types/Axis.md new file mode 100644 index 000000000..7afc032b0 --- /dev/null +++ b/docs/kcl/types/Axis.md @@ -0,0 +1,50 @@ +--- +title: "Axis" +excerpt: "Co-ordinate axis specifier. + +See [cglearn.eu] for background reading. + +[cglearn.eu]: https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1" +layout: manual +--- + +Co-ordinate axis specifier. + +See [cglearn.eu] for background reading. + +[cglearn.eu]: https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1 + + + + + +**This schema accepts exactly one of the following:** + +'Y' axis. + +**enum:** `y` + + + + + + + + +---- +'Z' axis. + +**enum:** `z` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/AxisAndOrigin.md b/docs/kcl/types/AxisAndOrigin.md new file mode 100644 index 000000000..ae9deb67e --- /dev/null +++ b/docs/kcl/types/AxisAndOrigin.md @@ -0,0 +1,81 @@ +--- +title: "AxisAndOrigin" +excerpt: "Axis and origin." +layout: manual +--- + +Axis and origin. + + + + + +**This schema accepts exactly one of the following:** + +X-axis. + +**enum:** `X` + + + + + + + + +---- +Y-axis. + +**enum:** `Y` + + + + + + + + +---- +Flip the X-axis. + +**enum:** `-X` + + + + + + + + +---- +Flip the Y-axis. + +**enum:** `-Y` + + + + + + + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `custom` |`object`| | No | + + +---- + + + + diff --git a/docs/kcl/types/AxisDirectionPair.md b/docs/kcl/types/AxisDirectionPair.md new file mode 100644 index 000000000..78ecc44c0 --- /dev/null +++ b/docs/kcl/types/AxisDirectionPair.md @@ -0,0 +1,22 @@ +--- +title: "AxisDirectionPair" +excerpt: "An [`Axis`] paired with a [`Direction`]." +layout: manual +--- + +An [`Axis`] paired with a [`Direction`]. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `axis` |[`Axis`](/docs/kcl/types/Axis)| Axis specifier. | No | +| `direction` |[`Direction`](/docs/kcl/types/Direction)| Specifies which direction the axis is pointing. | No | + + diff --git a/docs/kcl/types/AxisOrEdgeReference.md b/docs/kcl/types/AxisOrEdgeReference.md new file mode 100644 index 000000000..ae12fc156 --- /dev/null +++ b/docs/kcl/types/AxisOrEdgeReference.md @@ -0,0 +1,42 @@ +--- +title: "AxisOrEdgeReference" +excerpt: "Axis or tagged edge." +layout: manual +--- + +Axis or tagged edge. + + + + +**This schema accepts any of the following:** + +Axis and origin. + +[`AxisAndOrigin`](/docs/kcl/types/AxisAndOrigin) + + + + + + + + +---- +Tagged edge. + +[`EdgeReference`](/docs/kcl/types/EdgeReference) + + + + + + + + +---- + + + + + diff --git a/docs/kcl/types/BasePath.md b/docs/kcl/types/BasePath.md new file mode 100644 index 000000000..e07ceb344 --- /dev/null +++ b/docs/kcl/types/BasePath.md @@ -0,0 +1,24 @@ +--- +title: "BasePath" +excerpt: "A base path." +layout: manual +--- + +A base path. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + diff --git a/docs/kcl/types/BezierData.md b/docs/kcl/types/BezierData.md index 1800279bd..1363fc723 100644 --- a/docs/kcl/types/BezierData.md +++ b/docs/kcl/types/BezierData.md @@ -6,8 +6,6 @@ layout: manual Data to draw a bezier curve. - - **Type:** `object` diff --git a/docs/kcl/types/ChamferData.md b/docs/kcl/types/ChamferData.md index 6d83a59d1..04aa0c390 100644 --- a/docs/kcl/types/ChamferData.md +++ b/docs/kcl/types/ChamferData.md @@ -6,8 +6,6 @@ layout: manual Data for chamfers. - - **Type:** `object` @@ -19,6 +17,6 @@ Data for chamfers. | Property | Type | Description | Required | |----------|------|-------------|----------| | `length` |`number`| The length of the chamfer. | No | -| `tags` |`[` **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The tags of the paths you want to chamfer. | No | +| `tags` |`[` [`EdgeReference`](/docs/kcl/types/EdgeReference) `]`| The tags of the paths you want to chamfer. | No | diff --git a/docs/kcl/types/CircleData.md b/docs/kcl/types/CircleData.md index 4f5c0008d..dab0db043 100644 --- a/docs/kcl/types/CircleData.md +++ b/docs/kcl/types/CircleData.md @@ -6,8 +6,6 @@ layout: manual Data for drawing an circle - - **Type:** `object` diff --git a/docs/kcl/types/CircularPattern2dData.md b/docs/kcl/types/CircularPattern2dData.md index e07c02f58..f4a101afd 100644 --- a/docs/kcl/types/CircularPattern2dData.md +++ b/docs/kcl/types/CircularPattern2dData.md @@ -6,8 +6,6 @@ layout: manual Data for a circular pattern on a 2D sketch. - - **Type:** `object` @@ -18,7 +16,7 @@ Data for a circular pattern on a 2D sketch. | Property | Type | Description | Required | |----------|------|-------------|----------| -| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | +| `repetitions` |[`Uint`](/docs/kcl/types/Uint)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | | `center` |`[number, number]`| The center about which to make the pattern. This is a 2D vector. | No | | `arcDegrees` |`number`| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No | | `rotateDuplicates` |`boolean`| Whether or not to rotate the duplicates as they are copied. | No | diff --git a/docs/kcl/types/CircularPattern3dData.md b/docs/kcl/types/CircularPattern3dData.md index 66e9c7b48..3e20cabd7 100644 --- a/docs/kcl/types/CircularPattern3dData.md +++ b/docs/kcl/types/CircularPattern3dData.md @@ -6,8 +6,6 @@ layout: manual Data for a circular pattern on a 3D model. - - **Type:** `object` @@ -18,7 +16,7 @@ Data for a circular pattern on a 3D model. | Property | Type | Description | Required | |----------|------|-------------|----------| -| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | +| `repetitions` |[`Uint`](/docs/kcl/types/Uint)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | | `axis` |`[number, number, number]`| The axis around which to make the pattern. This is a 3D vector. | No | | `center` |`[number, number, number]`| The center about which to make the pattern. This is a 3D vector. | No | | `arcDegrees` |`number`| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No | diff --git a/docs/kcl/types/Direction.md b/docs/kcl/types/Direction.md new file mode 100644 index 000000000..08faf9130 --- /dev/null +++ b/docs/kcl/types/Direction.md @@ -0,0 +1,42 @@ +--- +title: "Direction" +excerpt: "Specifies the sign of a co-ordinate axis." +layout: manual +--- + +Specifies the sign of a co-ordinate axis. + + + + + +**This schema accepts exactly one of the following:** + +Increasing numbers. + +**enum:** `positive` + + + + + + + + +---- +Decreasing numbers. + +**enum:** `negative` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/EdgeCut.md b/docs/kcl/types/EdgeCut.md new file mode 100644 index 000000000..ecb28556d --- /dev/null +++ b/docs/kcl/types/EdgeCut.md @@ -0,0 +1,58 @@ +--- +title: "EdgeCut" +excerpt: "A fillet or a chamfer." +layout: manual +--- + +A fillet or a chamfer. + + + + + +**This schema accepts exactly one of the following:** + +A fillet. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `fillet`| | No | +| `id` |`string`| The id of the engine command that called this fillet. | No | +| `radius` |`number`| | No | +| `edgeId` |`string`| The engine id of the edge to fillet. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| A fillet or a chamfer. | No | + + +---- +A chamfer. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `chamfer`| | No | +| `id` |`string`| The id of the engine command that called this chamfer. | No | +| `length` |`number`| | No | +| `edgeId` |`string`| The engine id of the edge to chamfer. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| A fillet or a chamfer. | No | + + +---- + + + + diff --git a/docs/kcl/types/EdgeReference.md b/docs/kcl/types/EdgeReference.md new file mode 100644 index 000000000..5ab65ce8b --- /dev/null +++ b/docs/kcl/types/EdgeReference.md @@ -0,0 +1,41 @@ +--- +title: "EdgeReference" +excerpt: "A tag or a uuid of an edge." +layout: manual +--- + +A tag or a uuid of an edge. + + + + +**This schema accepts any of the following:** + +A uuid of an edge. + +**Type:** `string` (`uuid`) + + + + + + + +---- +A tag of an edge. + +[`TagIdentifier`](/docs/kcl/types#tag-identifier) + + + + + + + + +---- + + + + + diff --git a/docs/kcl/types/ExtrudeSurface.md b/docs/kcl/types/ExtrudeSurface.md new file mode 100644 index 000000000..19cba133b --- /dev/null +++ b/docs/kcl/types/ExtrudeSurface.md @@ -0,0 +1,98 @@ +--- +title: "ExtrudeSurface" +excerpt: "An extrude surface." +layout: manual +--- + +An extrude surface. + + + + + +**This schema accepts exactly one of the following:** + +An extrude plane. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `extrudePlane`| | No | +| `faceId` |`string`| The face id for the extrude plane. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | +| `id` |`string`| The id of the geometry. | No | +| `sourceRange` |`SourceRange`| The source range. | No | + + +---- +An extruded arc. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `extrudeArc`| | No | +| `faceId` |`string`| The face id for the extrude plane. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | +| `id` |`string`| The id of the geometry. | No | +| `sourceRange` |`SourceRange`| The source range. | No | + + +---- +Geometry metadata. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `chamfer`| | No | +| `faceId` |`string`| The id for the chamfer surface. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | +| `id` |`string`| The id of the geometry. | No | +| `sourceRange` |`SourceRange`| The source range. | No | + + +---- +Geometry metadata. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `fillet`| | No | +| `faceId` |`string`| The id for the fillet surface. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | +| `id` |`string`| The id of the geometry. | No | +| `sourceRange` |`SourceRange`| The source range. | No | + + +---- + + + + diff --git a/docs/kcl/types/FaceTag.md b/docs/kcl/types/FaceTag.md index 5d7b097af..0be171cf7 100644 --- a/docs/kcl/types/FaceTag.md +++ b/docs/kcl/types/FaceTag.md @@ -9,45 +9,17 @@ A tag for a face. - **This schema accepts any of the following:** +A tag for a face. + +[`StartOrEnd`](/docs/kcl/types/StartOrEnd) -**This schema accepts exactly one of the following:** - -The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera. - - - -**enum:** `start` - - - - - - - ----- -The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera. - - - -**enum:** `end` - - - - - - - ----- - - ---- @@ -62,7 +34,6 @@ A tag for the face. - ---- diff --git a/docs/kcl/types/FilletData.md b/docs/kcl/types/FilletData.md index 340d7f39a..b581f0461 100644 --- a/docs/kcl/types/FilletData.md +++ b/docs/kcl/types/FilletData.md @@ -6,8 +6,6 @@ layout: manual Data for fillets. - - **Type:** `object` @@ -19,7 +17,7 @@ Data for fillets. | Property | Type | Description | Required | |----------|------|-------------|----------| | `radius` |`number`| The radius of the fillet. | No | -| `tags` |`[` **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The tags of the paths you want to fillet. | No | +| `tags` |`[` [`EdgeReference`](/docs/kcl/types/EdgeReference) `]`| The tags of the paths you want to fillet. | No | | `tolerance` |`number`| The tolerance for the fillet. | No | diff --git a/docs/kcl/types/GeoMeta.md b/docs/kcl/types/GeoMeta.md new file mode 100644 index 000000000..daa32f141 --- /dev/null +++ b/docs/kcl/types/GeoMeta.md @@ -0,0 +1,22 @@ +--- +title: "GeoMeta" +excerpt: "Geometry metadata." +layout: manual +--- + +Geometry metadata. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `id` |`string`| The id of the geometry. | No | +| `sourceRange` |`SourceRange`| The source range. | No | + + diff --git a/docs/kcl/types/HelixData.md b/docs/kcl/types/HelixData.md index f7f20f103..928d71990 100644 --- a/docs/kcl/types/HelixData.md +++ b/docs/kcl/types/HelixData.md @@ -6,8 +6,6 @@ layout: manual Data for helices. - - **Type:** `object` diff --git a/docs/kcl/types/ImportFormat.md b/docs/kcl/types/ImportFormat.md index 488fe832e..6ecc54824 100644 --- a/docs/kcl/types/ImportFormat.md +++ b/docs/kcl/types/ImportFormat.md @@ -10,13 +10,10 @@ Import format specifier - **This schema accepts exactly one of the following:** Autodesk Filmbox (FBX) format - - **Type:** `object` @@ -33,8 +30,6 @@ Autodesk Filmbox (FBX) format ---- Binary glTF 2.0. We refer to this as glTF since that is how our customers refer to it, but this can also import binary glTF (glb). - - **Type:** `object` @@ -51,8 +46,6 @@ Binary glTF 2.0. We refer to this as glTF since that is how our customers refer ---- Wavefront OBJ format. - - **Type:** `object` @@ -64,15 +57,13 @@ Wavefront OBJ format. | Property | Type | Description | Required | |----------|------|-------------|----------| | `type` |enum: `obj`| | No | -| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | -| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | +| `coords` |[`System`](/docs/kcl/types/System)| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | +| `units` |[`UnitLength`](/docs/kcl/types/UnitLength)| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | ---- The PLY Polygon File Format. - - **Type:** `object` @@ -84,15 +75,13 @@ The PLY Polygon File Format. | Property | Type | Description | Required | |----------|------|-------------|----------| | `type` |enum: `ply`| | No | -| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | -| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | +| `coords` |[`System`](/docs/kcl/types/System)| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | +| `units` |[`UnitLength`](/docs/kcl/types/UnitLength)| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | ---- SolidWorks part (SLDPRT) format. - - **Type:** `object` @@ -109,8 +98,6 @@ SolidWorks part (SLDPRT) format. ---- ISO 10303-21 (STEP) format. - - **Type:** `object` @@ -127,8 +114,6 @@ ISO 10303-21 (STEP) format. ---- ST**ereo**L**ithography format. - - **Type:** `object` @@ -140,8 +125,8 @@ ST**ereo**L**ithography format. | Property | Type | Description | Required | |----------|------|-------------|----------| | `type` |enum: `stl`| | No | -| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | -| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | +| `coords` |[`System`](/docs/kcl/types/System)| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No | +| `units` |[`UnitLength`](/docs/kcl/types/UnitLength)| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No | ---- diff --git a/docs/kcl/types/ImportedGeometry.md b/docs/kcl/types/ImportedGeometry.md index 681d48743..1acbe6e63 100644 --- a/docs/kcl/types/ImportedGeometry.md +++ b/docs/kcl/types/ImportedGeometry.md @@ -6,8 +6,6 @@ layout: manual Data for an imported geometry. - - **Type:** `object` @@ -20,6 +18,6 @@ Data for an imported geometry. |----------|------|-------------|----------| | `id` |`string`| The ID of the imported geometry. | No | | `value` |`[` `string` `]`| The original file paths. | No | -| `__meta` |`[` `object` `]`| | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | diff --git a/docs/kcl/types/LinearPattern2dData.md b/docs/kcl/types/LinearPattern2dData.md index c95da2ad4..a03a22908 100644 --- a/docs/kcl/types/LinearPattern2dData.md +++ b/docs/kcl/types/LinearPattern2dData.md @@ -6,8 +6,6 @@ layout: manual Data for a linear pattern on a 2D sketch. - - **Type:** `object` @@ -18,7 +16,7 @@ Data for a linear pattern on a 2D sketch. | Property | Type | Description | Required | |----------|------|-------------|----------| -| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | +| `repetitions` |[`Uint`](/docs/kcl/types/Uint)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | | `distance` |`number`| The distance between each repetition. This can also be referred to as spacing. | No | | `axis` |`[number, number]`| The axis of the pattern. This is a 2D vector. | No | diff --git a/docs/kcl/types/LinearPattern3dData.md b/docs/kcl/types/LinearPattern3dData.md index c5d69ee74..ad31c48ab 100644 --- a/docs/kcl/types/LinearPattern3dData.md +++ b/docs/kcl/types/LinearPattern3dData.md @@ -6,8 +6,6 @@ layout: manual Data for a linear pattern on a 3D model. - - **Type:** `object` @@ -18,7 +16,7 @@ Data for a linear pattern on a 3D model. | Property | Type | Description | Required | |----------|------|-------------|----------| -| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | +| `repetitions` |[`Uint`](/docs/kcl/types/Uint)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if `repetitions` is 1, the original entity will be copied once. | No | | `distance` |`number`| The distance between each repetition. This can also be referred to as spacing. | No | | `axis` |`[number, number, number]`| The axis of the pattern. | No | diff --git a/docs/kcl/types/LoftData.md b/docs/kcl/types/LoftData.md index d077c052b..bbf27003e 100644 --- a/docs/kcl/types/LoftData.md +++ b/docs/kcl/types/LoftData.md @@ -6,8 +6,6 @@ layout: manual Data for a loft. - - **Type:** `object` diff --git a/docs/kcl/types/Metadata.md b/docs/kcl/types/Metadata.md new file mode 100644 index 000000000..0ef893ae0 --- /dev/null +++ b/docs/kcl/types/Metadata.md @@ -0,0 +1,21 @@ +--- +title: "Metadata" +excerpt: "Metadata." +layout: manual +--- + +Metadata. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `sourceRange` |`SourceRange`| The source range. | No | + + diff --git a/docs/kcl/types/Mirror2dData.md b/docs/kcl/types/Mirror2dData.md index e65a5ffb1..40ee590c4 100644 --- a/docs/kcl/types/Mirror2dData.md +++ b/docs/kcl/types/Mirror2dData.md @@ -6,8 +6,6 @@ layout: manual Data for a mirror. - - **Type:** `object` @@ -18,6 +16,6 @@ Data for a mirror. | Property | Type | Description | Required | |----------|------|-------------|----------| -| `axis` |**anyOf:** **oneOf:** enum: `X` **OR** enum: `Y` **OR** enum: `-X` **OR** enum: `-Y` **OR** `object` **OR** **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier)| Axis to use as mirror. | No | +| `axis` |[`AxisOrEdgeReference`](/docs/kcl/types/AxisOrEdgeReference)| Axis to use as mirror. | No | diff --git a/docs/kcl/types/Path.md b/docs/kcl/types/Path.md new file mode 100644 index 000000000..eafb16171 --- /dev/null +++ b/docs/kcl/types/Path.md @@ -0,0 +1,168 @@ +--- +title: "Path" +excerpt: "A path." +layout: manual +--- + +A path. + + + + + +**This schema accepts exactly one of the following:** + +A path that goes to a point. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `ToPoint`| | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +A arc that is tangential to the last path segment that goes to a point + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `TangentialArcTo`| | No | +| `center` |`[number, number]`| the arc's center | No | +| `ccw` |`boolean`| arc's direction | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +A arc that is tangential to the last path segment + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `TangentialArc`| | No | +| `center` |`[number, number]`| the arc's center | No | +| `ccw` |`boolean`| arc's direction | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +a complete arc + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Circle`| | No | +| `center` |`[number, number]`| the arc's center | No | +| `radius` |`number`| the arc's radius | No | +| `ccw` |`boolean`| arc's direction | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +A path that is horizontal. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Horizontal`| | No | +| `x` |`number`| The x coordinate. | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +An angled line to. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `AngledLineTo`| | No | +| `x` |`number`| The x coordinate. | No | +| `y` |`number`| The y coordinate. | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- +A base path. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Base`| | No | +| `from` |`[number, number]`| The from point. | No | +| `to` |`[number, number]`| The to point. | No | +| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | +| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | + + +---- + + + + diff --git a/docs/kcl/types/PlaneData.md b/docs/kcl/types/PlaneData.md index 5ece46a25..f16cfd9d2 100644 --- a/docs/kcl/types/PlaneData.md +++ b/docs/kcl/types/PlaneData.md @@ -10,13 +10,10 @@ Data for a plane. - **This schema accepts exactly one of the following:** The XY plane. - - **enum:** `XY` @@ -25,11 +22,10 @@ The XY plane. + ---- The opposite side of the XY plane. - - **enum:** `-XY` @@ -38,11 +34,10 @@ The opposite side of the XY plane. + ---- The XZ plane. - - **enum:** `XZ` @@ -51,11 +46,10 @@ The XZ plane. + ---- The opposite side of the XZ plane. - - **enum:** `-XZ` @@ -64,11 +58,10 @@ The opposite side of the XZ plane. + ---- The YZ plane. - - **enum:** `YZ` @@ -77,11 +70,10 @@ The YZ plane. + ---- The opposite side of the YZ plane. - - **enum:** `-YZ` @@ -90,11 +82,10 @@ The opposite side of the YZ plane. + ---- A defined plane. - - **Type:** `object` diff --git a/docs/kcl/types/PlaneType.md b/docs/kcl/types/PlaneType.md new file mode 100644 index 000000000..499c81577 --- /dev/null +++ b/docs/kcl/types/PlaneType.md @@ -0,0 +1,41 @@ +--- +title: "PlaneType" +excerpt: "Type for a plane." +layout: manual +--- + +Type for a plane. + + + + + +**This schema accepts exactly one of the following:** + + +**enum:** `XY`, `XZ`, `YZ` + + + + + + + + +---- +A custom plane. + +**enum:** `Custom` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/Point3d.md b/docs/kcl/types/Point3d.md new file mode 100644 index 000000000..a78edd4df --- /dev/null +++ b/docs/kcl/types/Point3d.md @@ -0,0 +1,22 @@ +--- +title: "Point3d" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `x` |`number`| | No | +| `y` |`number`| | No | +| `z` |`number`| | No | + + diff --git a/docs/kcl/types/PolarCoordsData.md b/docs/kcl/types/PolarCoordsData.md index 332707c27..e719d523b 100644 --- a/docs/kcl/types/PolarCoordsData.md +++ b/docs/kcl/types/PolarCoordsData.md @@ -6,8 +6,6 @@ layout: manual Data for polar coordinates. - - **Type:** `object` diff --git a/docs/kcl/types/RevolveData.md b/docs/kcl/types/RevolveData.md index ca4acde5c..83f451fc0 100644 --- a/docs/kcl/types/RevolveData.md +++ b/docs/kcl/types/RevolveData.md @@ -6,8 +6,6 @@ layout: manual Data for revolution surfaces. - - **Type:** `object` @@ -19,7 +17,7 @@ Data for revolution surfaces. | Property | Type | Description | Required | |----------|------|-------------|----------| | `angle` |`number`| Angle to revolve (in degrees). Default is 360. | No | -| `axis` |**anyOf:** **oneOf:** enum: `X` **OR** enum: `Y` **OR** enum: `-X` **OR** enum: `-Y` **OR** `object` **OR** **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier)| Axis of revolution. | No | +| `axis` |[`AxisOrEdgeReference`](/docs/kcl/types/AxisOrEdgeReference)| Axis of revolution. | No | | `tolerance` |`number`| Tolerance for the revolve operation. | No | diff --git a/docs/kcl/types/ShellData.md b/docs/kcl/types/ShellData.md index 2a27d2bde..57fd89611 100644 --- a/docs/kcl/types/ShellData.md +++ b/docs/kcl/types/ShellData.md @@ -6,8 +6,6 @@ layout: manual Data for shells. - - **Type:** `object` @@ -19,6 +17,6 @@ Data for shells. | Property | Type | Description | Required | |----------|------|-------------|----------| | `thickness` |`number`| The thickness of the shell. | No | -| `faces` |`[` **anyOf:** **oneOf:** enum: `start` **OR** enum: `end` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The faces you want removed. | No | +| `faces` |`[` [`FaceTag`](/docs/kcl/types/FaceTag) `]`| The faces you want removed. | No | diff --git a/docs/kcl/types/Sketch.md b/docs/kcl/types/Sketch.md index 3a4a7725f..bc170a713 100644 --- a/docs/kcl/types/Sketch.md +++ b/docs/kcl/types/Sketch.md @@ -6,8 +6,6 @@ layout: manual A sketch is a collection of paths. - - **Type:** `object` @@ -19,10 +17,10 @@ A sketch is a collection of paths. | Property | Type | Description | Required | |----------|------|-------------|----------| | `id` |`string`| The id of the sketch (this will change when the engine's reference to it changes. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No | -| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No | -| `start` |`object`| The starting path. | No | +| `value` |`[` [`Path`](/docs/kcl/types/Path) `]`| The paths in the sketch. | No | +| `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | +| `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | diff --git a/docs/kcl/types/SketchData.md b/docs/kcl/types/SketchData.md index 46e9354a2..53ee3ef0c 100644 --- a/docs/kcl/types/SketchData.md +++ b/docs/kcl/types/SketchData.md @@ -9,10 +9,9 @@ Data for start sketch on. You can start a sketch on a plane or an solid. - **This schema accepts any of the following:** -Data for a plane. +Data for start sketch on. You can start a sketch on a plane or an solid. [`PlaneData`](/docs/kcl/types/PlaneData) @@ -23,30 +22,16 @@ Data for a plane. - ---- -An solid is a collection of extrude surfaces. +Data for start sketch on. You can start a sketch on a plane or an solid. - - -**Type:** `object` +[`Solid`](/docs/kcl/types/Solid) -## Properties -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `id` |`string`| The id of the solid. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No | -| `sketch` |`object`| The sketch. | No | -| `height` |`number`| The height of the solid. | No | -| `startCapId` |`string`| The id of the extrusion start cap | No | -| `endCapId` |`string`| The id of the extrusion end cap | No | -| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | ---- diff --git a/docs/kcl/types/SketchOrSurface.md b/docs/kcl/types/SketchOrSurface.md index 240fb9f2e..edce1add7 100644 --- a/docs/kcl/types/SketchOrSurface.md +++ b/docs/kcl/types/SketchOrSurface.md @@ -9,93 +9,29 @@ A sketch surface or a sketch. - **This schema accepts any of the following:** -A sketch type. +A sketch surface or a sketch. + +[`SketchSurface`](/docs/kcl/types/SketchSurface) -**This schema accepts exactly one of the following:** - -A plane. - - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `plane`| | No | -| `id` |`string`| The id of the plane. | No | -| `value` |**oneOf:** enum: `XY`, `XZ`, `YZ` **OR** enum: `Custom`| Type for a plane. | No | -| `origin` |`object`| Origin of the plane. | No | -| `xAxis` |`object`| What should the plane’s X axis be? | No | -| `yAxis` |`object`| What should the plane’s Y axis be? | No | -| `zAxis` |`object`| The z-axis (normal). | No | -| `__meta` |`[` `object` `]`| | No | - - ----- -A face. - - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `face`| | No | -| `id` |`string`| The id of the face. | No | -| `value` |`string`| The tag of the face. | No | -| `xAxis` |`object`| What should the face’s X axis be? | No | -| `yAxis` |`object`| What should the face’s Y axis be? | No | -| `zAxis` |`object`| The z-axis (normal). | No | -| `solid` |`object`| The solid the face is on. | No | -| `__meta` |`[` `object` `]`| | No | - - ----- - - ---- -A sketch is a collection of paths. +A sketch surface or a sketch. - - -**Type:** `object` +[`Sketch`](/docs/kcl/types/Sketch) -## Properties -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `id` |`string`| The id of the sketch (this will change when the engine's reference to it changes. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No | -| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No | -| `start` |`object`| The starting path. | No | -| `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | ---- diff --git a/docs/kcl/types/SketchSet.md b/docs/kcl/types/SketchSet.md index b33136104..f421ac8e5 100644 --- a/docs/kcl/types/SketchSet.md +++ b/docs/kcl/types/SketchSet.md @@ -10,13 +10,10 @@ A sketch or a group of sketches. - **This schema accepts exactly one of the following:** A sketch is a collection of paths. - - **Type:** `object` @@ -29,20 +26,18 @@ A sketch is a collection of paths. |----------|------|-------------|----------| | `type` |enum: `sketch`| | No | | `id` |`string`| The id of the sketch (this will change when the engine's reference to it changes. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No | -| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No | -| `start` |`object`| The starting path. | No | +| `value` |`[` [`Path`](/docs/kcl/types/Path) `]`| The paths in the sketch. | No | +| `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | +| `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | ---- - - **Type:** `[object, array]` -`[` `object` `]` +`[` [`Sketch`](/docs/kcl/types/Sketch) `]` diff --git a/docs/kcl/types/SketchSurface.md b/docs/kcl/types/SketchSurface.md index 9f4e7157b..bfe592657 100644 --- a/docs/kcl/types/SketchSurface.md +++ b/docs/kcl/types/SketchSurface.md @@ -10,13 +10,10 @@ A sketch type. - **This schema accepts exactly one of the following:** A plane. - - **Type:** `object` @@ -29,19 +26,17 @@ A plane. |----------|------|-------------|----------| | `type` |enum: `plane`| | No | | `id` |`string`| The id of the plane. | No | -| `value` |**oneOf:** enum: `XY`, `XZ`, `YZ` **OR** enum: `Custom`| Type for a plane. | No | -| `origin` |`object`| Origin of the plane. | No | -| `xAxis` |`object`| What should the plane’s X axis be? | No | -| `yAxis` |`object`| What should the plane’s Y axis be? | No | -| `zAxis` |`object`| The z-axis (normal). | No | -| `__meta` |`[` `object` `]`| | No | +| `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| A sketch type. | No | +| `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | +| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | +| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | +| `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | ---- A face. - - **Type:** `object` @@ -55,11 +50,11 @@ A face. | `type` |enum: `face`| | No | | `id` |`string`| The id of the face. | No | | `value` |`string`| The tag of the face. | No | -| `xAxis` |`object`| What should the face’s X axis be? | No | -| `yAxis` |`object`| What should the face’s Y axis be? | No | -| `zAxis` |`object`| The z-axis (normal). | No | -| `solid` |`object`| The solid the face is on. | No | -| `__meta` |`[` `object` `]`| | No | +| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s X axis be? | No | +| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | +| `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | +| `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | ---- diff --git a/docs/kcl/types/Solid.md b/docs/kcl/types/Solid.md index 0d31628a6..e85be8b15 100644 --- a/docs/kcl/types/Solid.md +++ b/docs/kcl/types/Solid.md @@ -6,8 +6,6 @@ layout: manual An solid is a collection of extrude surfaces. - - **Type:** `object` @@ -19,12 +17,12 @@ An solid is a collection of extrude surfaces. | Property | Type | Description | Required | |----------|------|-------------|----------| | `id` |`string`| The id of the solid. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No | -| `sketch` |`object`| The sketch. | No | +| `value` |`[` [`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface) `]`| The extrude surfaces. | No | +| `sketch` |[`Sketch`](/docs/kcl/types/Sketch)| The sketch. | No | | `height` |`number`| The height of the solid. | No | | `startCapId` |`string`| The id of the extrusion start cap | No | | `endCapId` |`string`| The id of the extrusion end cap | No | -| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | +| `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | diff --git a/docs/kcl/types/SolidSet.md b/docs/kcl/types/SolidSet.md index c3f0d1781..802a4affe 100644 --- a/docs/kcl/types/SolidSet.md +++ b/docs/kcl/types/SolidSet.md @@ -10,13 +10,10 @@ A solid or a group of solids. - **This schema accepts exactly one of the following:** An solid is a collection of extrude surfaces. - - **Type:** `object` @@ -29,22 +26,20 @@ An solid is a collection of extrude surfaces. |----------|------|-------------|----------| | `type` |enum: `solid`| | No | | `id` |`string`| The id of the solid. | No | -| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No | -| `sketch` |`object`| The sketch. | No | +| `value` |`[` [`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface) `]`| The extrude surfaces. | No | +| `sketch` |[`Sketch`](/docs/kcl/types/Sketch)| The sketch. | No | | `height` |`number`| The height of the solid. | No | | `startCapId` |`string`| The id of the extrusion start cap | No | | `endCapId` |`string`| The id of the extrusion end cap | No | -| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No | -| `__meta` |`[` `object` `]`| Metadata. | No | +| `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | ---- - - **Type:** `[object, array]` -`[` `object` `]` +`[` [`Solid`](/docs/kcl/types/Solid) `]` diff --git a/docs/kcl/types/StandardPlane.md b/docs/kcl/types/StandardPlane.md index 0fcaad569..a1ece40fc 100644 --- a/docs/kcl/types/StandardPlane.md +++ b/docs/kcl/types/StandardPlane.md @@ -10,13 +10,10 @@ One of the standard planes. - **This schema accepts exactly one of the following:** The XY plane. - - **enum:** `XY` @@ -25,11 +22,10 @@ The XY plane. + ---- The opposite side of the XY plane. - - **enum:** `-XY` @@ -38,11 +34,10 @@ The opposite side of the XY plane. + ---- The XZ plane. - - **enum:** `XZ` @@ -51,11 +46,10 @@ The XZ plane. + ---- The opposite side of the XZ plane. - - **enum:** `-XZ` @@ -64,11 +58,10 @@ The opposite side of the XZ plane. + ---- The YZ plane. - - **enum:** `YZ` @@ -77,11 +70,10 @@ The YZ plane. + ---- The opposite side of the YZ plane. - - **enum:** `-YZ` @@ -90,6 +82,7 @@ The opposite side of the YZ plane. + ---- diff --git a/docs/kcl/types/StartOrEnd.md b/docs/kcl/types/StartOrEnd.md new file mode 100644 index 000000000..6e8ed9329 --- /dev/null +++ b/docs/kcl/types/StartOrEnd.md @@ -0,0 +1,41 @@ +--- +title: "StartOrEnd" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera. + +**enum:** `start` + + + + + + + + +---- +The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera. + +**enum:** `end` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/System.md b/docs/kcl/types/System.md new file mode 100644 index 000000000..a80c7fd34 --- /dev/null +++ b/docs/kcl/types/System.md @@ -0,0 +1,34 @@ +--- +title: "System" +excerpt: "Co-ordinate system definition. + +The `up` axis must be orthogonal to the `forward` axis. + +See [cglearn.eu] for background reading. + +[cglearn.eu](https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1)" +layout: manual +--- + +Co-ordinate system definition. + +The `up` axis must be orthogonal to the `forward` axis. + +See [cglearn.eu] for background reading. + +[cglearn.eu](https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1) + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `forward` |[`AxisDirectionPair`](/docs/kcl/types/AxisDirectionPair)| Axis the front face of a model looks along. | No | +| `up` |[`AxisDirectionPair`](/docs/kcl/types/AxisDirectionPair)| Axis pointing up and away from a model. | No | + + diff --git a/docs/kcl/types/TagEngineInfo.md b/docs/kcl/types/TagEngineInfo.md new file mode 100644 index 000000000..ac4cc9cd6 --- /dev/null +++ b/docs/kcl/types/TagEngineInfo.md @@ -0,0 +1,24 @@ +--- +title: "TagEngineInfo" +excerpt: "Engine information for a tag." +layout: manual +--- + +Engine information for a tag. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `id` |`string`| The id of the tagged object. | No | +| `sketch` |`string`| The sketch the tag is on. | No | +| `path` |[`BasePath`](/docs/kcl/types/BasePath)| The path the tag is on. | No | +| `surface` |[`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface)| The surface information for the tag. | No | + + diff --git a/docs/kcl/types/TangentialArcData.md b/docs/kcl/types/TangentialArcData.md index 5ece0c8e5..0f21cfe7c 100644 --- a/docs/kcl/types/TangentialArcData.md +++ b/docs/kcl/types/TangentialArcData.md @@ -9,12 +9,9 @@ Data to draw a tangential arc. - **This schema accepts any of the following:** - - **Type:** `object` diff --git a/docs/kcl/types/Uint.md b/docs/kcl/types/Uint.md new file mode 100644 index 000000000..25c3e0fdc --- /dev/null +++ b/docs/kcl/types/Uint.md @@ -0,0 +1,15 @@ +--- +title: "Uint" +excerpt: "" +layout: manual +--- + + +**Type:** `integer` (`uint32`) + + + + + + + diff --git a/docs/kcl/types/UnitLength.md b/docs/kcl/types/UnitLength.md new file mode 100644 index 000000000..1e0bbd7a4 --- /dev/null +++ b/docs/kcl/types/UnitLength.md @@ -0,0 +1,90 @@ +--- +title: "UnitLength" +excerpt: "The valid types of length units." +layout: manual +--- + +The valid types of length units. + + + + + +**This schema accepts exactly one of the following:** + +Centimeters <https://en.wikipedia.org/wiki/Centimeter> + +**enum:** `cm` + + + + + + + + +---- +Feet <https://en.wikipedia.org/wiki/Foot_(unit)> + +**enum:** `ft` + + + + + + + + +---- +Inches <https://en.wikipedia.org/wiki/Inch> + +**enum:** `in` + + + + + + + + +---- +Meters <https://en.wikipedia.org/wiki/Meter> + +**enum:** `m` + + + + + + + + +---- +Millimeters <https://en.wikipedia.org/wiki/Millimeter> + +**enum:** `mm` + + + + + + + + +---- +Yards <https://en.wikipedia.org/wiki/Yard> + +**enum:** `yd` + + + + + + + + +---- + + + + diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png index 1bd9eeaedd4e849c9720c6bc689b0b9820a888fe..ca5f1a3b4468ee18b2d5ae9efa86c4789d3eeade 100644 GIT binary patch delta 13223 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-win32.png index 0c5af147e8204e39e276235f671f4b507e1417a8..ec9cf155485e050721f580d8b47d2b5b8f377eac 100644 GIT binary patch literal 45141 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 a4*#iD=NYSuk2@r8NAa%OoqRc?SN{Vsn|xFN literal 46793 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 delta 11037 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%0AeEdb&-pNfe)yX0& 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png index 3a41098eecd9f737d871c83ff99069d5888af762..4c919c930181617422b8920ff1edaf3c50f2455d 100644 GIT binary patch literal 56236 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 literal 56023 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°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

2T4%r3t9{+|v+g z@9YdBsSm^57|OZjG7|&beyj{M7z?zORMeEkK+VHUl=}9q`RgRmJycdMFG9F6<+dckydM!ZI9SF!Xe}^O%K&g}FCVfg&hBd7@0-XgQK*V1WYP z*{l~eo~Vh7zXBjzs#_ls8Tn7(3axfs z%%!EJRT&}CeL#8^ii@VIqVn$1+fUG&huDONGa56M&!dY(WK$@H$?X$B!XOv$ z0ICS6){C=aNB|ae6k(E89{XmNaYIlm@~F{TO3w7R0&Dc-N#{y`>XoF$GJ6JI0x)@S zaDb18XQ@Y6!3(S4S@D`Ef97Y!9*Qg?gMLHf9``Rv=%W{j-p+j$?tzZxPjbtycx>Zl zV%=1OQ-MzDICF;TEwC$-RXXU&`_)ltuu)}y&5CN=Oq$?L``;1t{YM}`K2}9 z8x|ht2a?rq&MH$s!mqNY*L{|UP#`ft>gedPCiX5dCg63j$I&+E**3^P<83D9FKL+r zhS6o&(r<_IOWJM%^GPEeO_q_ztbq%QqH2r8n6KM8v7VK4WeqipOtJ5|2w7e~KPQkz z7x4~CP^Y5Ne-jt7)7@&yU=R!Za@|($jd{wF_qn@9RgZWsF`4-caJ4Lp!Ct z=0z~^0K*70tj5O1IyzI0V`GQg(+sgPL~L*et9tulAMMcc}3V$Q5NSC%Y zufs~c{CdeW%9UPsl$UoDRaL>GAP2o~apd`n0yNq^Lc*~RWo+WOqYtE92GG@t)UVoA z-3>Bv>cwNV*g5X@ml+d}cLD7XF5R=|Cre0qSo|=l_qlhAt)pC(T#$g96Ave64_kNs zkj2m5-nUQLoSe8E$k^}`9=(wxiGseGLU25-k<~O#hl-YYe}F|Qs+ZM}Ft+YxNqwE3 zUNP@HHKS9w!WV8V`6jCigQ?=%pL1z=UVT^iGkv{w@WTp?$?(umRPN`sO>rFvq`(w+ z^4eVO${|f$g-e&ctfE@g$R)ve#X)?VAv?E8IKl0oDJY`E2FJ$&6;1v3qe1kLLZrJ(cRqAb_syFX6F#+KEP z7u1G!*HN<2AuZTGh4tCMm#Hsb@^kc9A9W9W>**nqfB&7#Ko)d}797DbuRm8~VTSj~ zjaj-#j_%)W5p_w+>mk|8;#>>uz4?@~Gl;%0Dlo=#x9Igdlam-8vj98+LA;1etWUFy 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 OL{VNR=mZPG$FhWT$=_&#O1%jlgkg{9y# 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 W)f>|Zgj_ta9F@BoiUsm!0sjL@lBx{= literal 44403 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

$08>`izU!N=cC-aTL`Lglr0}rFZlK7q<&i7CA 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 Uv7w1ZehQOUq`O19JMO~w`~Lgh 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 O-}7?wcfIZso&7(oMj#OY diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png index 26d6a987356103b618fe5b4679a235d46878e05c..298793004118474333a3e73d845e432fb4d73d99 100644 GIT binary patch literal 73108 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-win32.png index 56c2299ad95a4bd6e483295d400ca562df08d1e5..e48674752c54c60746d26cfa03eab7e349a64628 100644 GIT binary patch literal 60063 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≪p9WkdbCJXPyQm@TdYNv*X9hmH(*dag-tu4t^$D&{5J{6)lER8 z_N~#?UEv(F$%v-IpgTZ?LY|(1ne6H-vbesp%S-SI9uQYc$;sK+*d+EDWndD(WCZkc zYPEW6nYrfK$nzOawe<8)?X0PUC6#BeS`we<`g}S{)LGo+Um7|3#n{|-iHh{`@7L0# zY{wf-T}b6Q6U=|E;q(?t??2%ZpPZa*45UALZRtG*#wI3gZ^GY#$fwg(!|pfnGdjB7 z^FHWfVv;t$qdEh|4jTF0xcRaGlY z6v$TnDRogH4zt$Wa1S!s83T1(C?f|y8=bpmZnplSPdyIqx{E~(Q42%PatzSlU+m3l z>*1e1d2H+W zv&=11*ZcON8LA}1U_(T|nWQvbSl1*)mq3%b=Kl8s^WigglR-Y`HD71ux;Qi502$Mo zZ_JE4{*0mi3e^7=N!*O37%4F+NljZDwD*Am1L!4yVcY_3o{OB-EWzc4jK6}#i2wng zxL5BOk$t1d;gE*w{qSN%uMW83WOg5OYpAM&!E+`_MjbS1)uKqEcPxfe{P5zNLf^FC z@Osv?!A=K)MLCLQo#U?9-&3h$K#Xyr525A&>j`S{~g(gQJ&NhnoD zDfNXQn&2en7?QJP6&&CEadk)K@mTTc`Ead5+`pdc_5IWJppcK6*G4sU)KE(M1b8Ix zSVeLH)NP}}Qnk`)C;iX8QICE?$^kl(CkfEsMrBa*>gqBjNC6ZB-mCz{+mRr^4;gqR zaNl&V@Nf~K4qV#$)hinGAJwqJTZ&js$4D$dy2(6px-Cq$ImN6^2$K=}hT9n2l{(amORDThLX0SATCVWmdI zFNnhb>({~$ALP4CS*pK_BD{To!jr9SY#Z9>Zy&7pGt=8|AKD+^A!-Y)oma9h+cj#l z6DAMw(U^KVqpZ<pzAIUD}{%cO(Y}uM|Utj^mO7q6~ ztzj>Uh5ilD$K1g%%h(zlgZE*oTaB6+P~pCQSSUzB|H--mtYs@`m4hwz+mv z^{xtoYwiVE&BJ&P(>LOn(Q&JN!qBjjpa6fx)+?4fM(umuU~gFXWq*C(6cf`YF7}u*!5!9;NV3#q_)bxbWUd>nV9~5f?i8`2Yk$KVTDRLqjgncllLhyP1_6O{IbEF9PxaL> z(aGc{JvKEn;wu!yH&`u)X^bs`T!P-u@O#_@4!#RgxZaoivJQ=evRse zl7Ct%#V*34BK&YNO34%Ox&%-wM)H1`{ckM* zzyzRgcQ-8bIAFvE$`p4X^8u2TS1-N{g`aXd@BR90D30PED1I>Op<*5*_4?s+N9F>o zo!hJFUJl-tvYO-_$`G`wnmrv=)edHQfN&2o1?Sq-mG$&?H?}Eag6(6AsUqn7ck~h^ zSu25;r1wCLo)3U?E)l1JbG_5pM#uq?_=tcu$l@WH zfB@b*Tvmfgn`Fsl)7c$fSUkn$9A{uqJi%@E>j)>~Lv!Q7_ZI)Qst)J5e7eu&L0Fw% z&Yu$XNc_)!ISvjEPk@zxPV*AT>Kq(W1-)(n@w>QW#X?Q5LyjJWblYp!T{UJP&n%?H z2Y;uUHptcInObneKfTIiv)F=D_+moxh*aR*4-W_9<3~*uJv|W4LL@M#3A!MiDp4_| z6&2VV6Trgr>x=|tON+mC-ecUu`ngTj;mIq7g`Hd*zrA*AY*<}cT0*;1zd!octE1gS zns~EVC@o~h4QqZ`W!GpzMacB+)eSt{+-yC&G@7cl@(n{p6mne8S8uFWX^$>uQH4n) z#AJQU^p)Sgho=`&Hrw3yyPsU4pA#$OG|;pcG&!hCym_!!lChG7=7;u=Dd?3k9~h`H4+Eom zp5+Ninp;^>leK&7Y7Pv%^MgYzEOEvi&I(R>M}2YsG8EcEvFOumw~ddjTv)@2A+L@_b!}gjsCd^(+B54wDVSzi!w< zKX2)o&_{XcdM<^-H1stUT1u{Vii6wR+CGxwG%-@=g0woB__HZ3JcFl7pjp6ke* z^W~U@u{0$+N5nn?1s%4}#HuS~r+U7ti$Xv^hncm=ye0t~vL)u$*arI)DbL=oGUdYf z$|a;HN5^G602qJ|rJl+GE(Q{0G_v#CasumJ2a*5qiA9Kjv24l!K8Jw61Jc9cO~LW^ z_t-?qeDA~bKkwvmMIIODxs8k{0ZOfo~4QQMKQRygLR z+2@p!6_`CI63^+U0n<2Y8gWnpY~NM`a6r-NbiK`pI(7Z8=NMRwIE?;?Cg2d5Y%EHD z7?^vrN_T&Qs9v18;|E(MeTATix*9(Qv+Qg&f&x-Cw2_+=3_UO7SC)4b-4;GoPq4s?P%gUhe)&9r%>~yZ{k>cfaS# z51W96Y0}~<;*qJe+^T!m6PCN-EAtD{0}ayUko8|@5l&Lf7I^%zl$-*fbD{(#@AWBJ zi-V4ttC7lC&Eim21F;J_S@(J>qjuBJP}A~;C>uis?Vm*Tk!W$%Hq1X7ZLRouAk0d9{sA4e0}5w3Ck0JN1V~ z!Lt?M?CP4md0uEG0L56C9snU@JLXLllb*X5bEwt=qzk-BdoV-m#|$oHOGB=Jw{Z%9 z3G00#`w|)BYAnL{4h9eaqvgCfBYK5ck~@s77h9ZX+lB1x&+RTx28a85Dt7+|((k6K z!Z%NzVA!(cgFHk+M!iSIK?0E=_eUtg_!8+GQwq}(2yS@9=cp+5YfE+S#oPsy7+bKC zg}J$bR86m=CShPJNu5FPwo5nNqNBXc%VGH6@Hp@!Ca06hTq3r>&h71VI;Ot@(@p}uPRgkH!O6q!qSpMYy zUu?YvRMl(rExIj2LZp-wq>=6hkyJuTlvKJ~LQ)B(yGua{=}y6*Q<_b8H%JP+wLSNL z-+SZUGaSb;7`XQ@zHhC$=A3JNjjjHUjrF4TZ`Ms^1HNgf=^}SUSQ#F8PWS~r81_(k z9L@-NH-PHno0-B=l&VXzYj#w zD;|ElmejZj9Kw+ay%QD=Le9Zb|%TBKVe zVIHsYbzucywuOQeAWS?-7UIsy0n`0cBG;VfGZC|`VdT}WTT<(6nS*YC1xM*qP$;$4 zi_NAnRlLM~`A&5oB%iL+m$wVw%mxkDITFL(b=&N?QSJ8{DjDYZr;RR*fGakq@1;Pp z5ahhFTv9D(Y`Og1fMm(&3yq&lXyA-Px1CUSd549`s~2jzxvM@xL-fr}OGeq^O7i{C z%r`nFn4o=73;9c1cm}u1#pe9Q4|cUT)la;`gO`<^Xwk4QRdXJ{UJo*Ei5_fQF|TyS zt^F1iW5eqo(y(Hg`ioeQ+ADT zdsFi_;-Pv6FQy(=`;y>JUPF!-{Fi?z#FKYvhrTqT!>|8n2hmkD-*s33QQzG46FcgKVv-+uXyN;dH#|v*VYO&IQ90@l z1=i1#spBq$)H4dv#@Q$M^d-Z9=?0AN6K5Nd}9rDZkih#il_r^n|RWDx@%1XNgw z`Tp^$;j}&n3oUlM#4h{MM&RY^W8QCEEVL}FbnUI|Gb^{;C%<{XMj5(6&~8?HamC0t z)qamy@Kb+DQpCRmCz@D`N&RQ@tx~p&iAe3M@ewzxg+}~2c9&=?yWP?Xdh)GG_Tijp ztr;;d2-TS~ABUc4a^6*Fu1!hwr@JpNLTCs04(w>2k`Et!Tidl_4vYODJ$SbaN@Aha zFM*byA_=mYvgn|?zy?+=(O&a8+em&xLuG#X=#M@U@vKAk2dphLlobJ{f0}&pa|>gc zmyE4BkIXGytFo0Xs-NCCB4-r#O*XaGA*noBn z{J;g!k}y7jRoX@sQ@z9eJ05*BuY=V=TS*_rr;fd-U{l;+X~}Qbxq%;W7Pd18%ENt{ z*D`Ca0+_Dg`Th;wTm{(tXz1@}SXY%*N%fV~ka2ZYh0R?l+-5sF!_gh(>upEVY&x}Q zBi)3V7K-+138)IID`mhykKDr0!QdwZa(lT!9bVK8AnBDz0R}ZfhHumpDZqtKhf=mi zy2u&5kx7P#NR-vXm6nNSv6BFJx2kp8SzOGRikAm6HXy0tdWxj<{|wD{4p&(gsk=KSOA`U0LH zc&|8kdDpKa&971)k^fvjS;-8y6L3o(abu9vtDm|$-h z$#75oXN$cZcQx#Cx_<6`q*GxsRDUx6EW(piyHFn)rQep1E#)WMeQ$7`y!zFA0#;Bh zKiNUZ-p2~oGDpdQ`_xN*7}S2hrCPLW9H7-CJGh9HoE#WE@j0&-TXc9B8&(hLHLcp( z#MEnh<)1iFRi@Nm4PBzIBR5@63pM$iWy);QvG;G5@dy3r@ z>n?6rVB9}$bV&8XOQB&sN7L`5O7#By4A7dWt%cfuJ$#7R*$pMz!o5!Ihv#ssVKJMY zfkFIm)UXE|je4D2RF#sX!UsFhiPAX4LbLDTk%?~>IX=+~jiFiON0N2MaiM6MBZ5d2Aa3eDF z?xJ+p@J?EjJW1}gGm9<~UxMtdrbR2eCT9iy{MK?{r|^=Via4r}_(gO+ulwdl=1bm4 zu1aRqFOoSN!k6FLjd>eB6tg)fboKJ$s8N_3-|x48;jcsdv~GF+^$3$h4ZYD=iJwmF zH+7r{Q6DCdFNYBw9c`X;(JFp1+vSQUIq!=z{-hd9_GfYEFJIICpSK+)CyFUiziVcP z`raXyX}zDDEq}DQlu{$jVhBh#b;1RyB{8UZ9zL(#yw1jKNS&xtVtrTl)hH z+{DVuiueuWcG|a4VQKkN$9>;-kFLy28on2`HSXaoIdUkjG)$bT8=EM1QT`-4UYDI^ zDrC2fp4Y@cE7Pr84L{WAv}NjK5S`y(V6o+4W4nqQW*WIh4vMN;;{qfaFG z;$dct?>6C3vHHtp%E3j7n7R%NKBeXB9Ql;1#ha}31ZLr5p|g)F%#6_w_{7iZi_-5R z#EJy1>7TqRWkS5nE>ghaV@S+hO$;`OC;ieS=yv1CzxxUz$|v-2;@Gc=SDs16rL}>{ z8S8UZEaz9LVKo-QGFNl&^uwpC4LBr7t{MYfhcU477IdSvr$)7^uBuxSl=X#-YJN5i zQJwxeAFJYcCo9WTD=lme-sAgJf}|c=S`G%MtL|Q^`R;`knhu92ZPsnd91Slqs0p6Y z`pwI!JmwW8Z!}=~wXtEY@TKYi_vU4_?eYLzM)8Z=U(kcPtOk`-qTnL# zkgh%Gcr15=MU2|M{BszRBs_%#E^=u1G3*N6j)1QO+s#GKjkQzY?r865bS1Qt)AE*2 z1%HpR8MEO`++`6Wuq_JTDL)PCLS6?Z|2ejiGJNS2FQn$OyKYP@+ z5Cjh6~(HBH^>Pq){WSkm&>CHtBK9GBP!vo~+} z2uAL=4bWr~7ZVVvb$w{%CZ>hMNjzy6nUM`ElkqMcpB3 z>`i~kS7R;t<)JTxQn%W)zZ}Zu*;q4;CP{y_>y9V0HjBU>nfSZ0&o4AC-%IdhF7Dpt z2&eP6$P8L0@kyrxIX7KvUTJwgn84G)aB%iYO2y5axTTmvHMwnrSC_cY=o)b5ck;L zT=+v`REiv7)dWjI*Ys`f>cOvWW_+#^M0dW)Ra}PGy?d0^t&Jx-X0FltKz=$Z2d=x! zMVUIfK9bg1*FnovHd)kipJR>y|GX(i0;VOg-Lud6>gIk#81-fbqJN^nM;S*)Mb(?` z1@Xnm+Yf(yqWwfCOZ!$eGs{o%6YbN-Yvsg;M44ro)^<eRm>=Q}}x0r^ixhSk;0^z9?n$i4)9M`MMquJ3gf zMZtz*(s`S?xne}TE}y#Z@D`P2Dl!rV$o7ouCKL@Fb_J&J3*?x_56T38T|6bqb^6-3 z8;rC3(?nW;mLn*NMZHC@-p*_4-AcR*asCq}8Um&Q3n_d?4R6O((a7-6$X(1pg(&&2 zsp!G_oE>~*4W|x@s*hFd1)2Jz79Fit9&m@m1^uv!2tD(awzlkEd6A`dlk?v#h=hDO z!wXY0V4i7s;aJDZKS3s=r1#dKrEAjvM5!Ciy_Toc-6TPYXno)?%Hq?aVkDisWp4_- zzG{ro_~E2~U9jSj=4VFvd}gK08bK3Z>E=ZmB|~oI$+3Q9->}1Z(6jMJh0>JC;X&AL z*2im4GUs6df}P3oLW8RPt~=%Y2mFyNr}C;w9m}olZ9@iKlMF5*eC7c&8?^Td1VK_8 z^YDiCr(Q^8nK?U`-#~jzFydv)q#hL(*Z3kOIW{giR;HuOHM|G6MYSL#y2QlssDtVhEgX=#tm%;^yLKBHyD{9(3 zzHhJ+Bs?tMs8AlJ{X+YfBQUXeq_2?vB;5Z>L^9ot-csKp)8!@ZFC5&4YDfwJ1NAud zr|?AKLd$E-oT!^a5IhZQPQ74Q$uh3v_=S3>$mek3zJt;ynb#-iDh ze*0Pyg@X)t!0-m1kkz?7G<0-uERuC=&R%^h@zNB_h&TSxm$MWt>~dnHbB96XiyWacg5GC?Exk?d{TkacLq{z{C_ zZn0M&4xM5MV?QbE8Lg2s6Z!5?>&<`oN$;iPvFIU#A4aGw?u4E}Q=IO#vWKmehA{-C zY7dt#GZ+05@KC^I-v50OR}da)^odBs{FAn7eExlY({htRdbeA53pk%NI86;j()>mc ztS|t?i?FuCrIsW}GUt;cjx)MPzFCvffyUsVH22+|-y(=atfQWDbR2&!;17hJ2=woM zc%K40k>gKXRij#v@6s&MI=I-6J|qHwAEu!&J{=2no`^dvuntBeMYs}+{~Fr|ylFph z7jw35yTKiXAEMg!P70JoP8OoUDR$DH(T{hT3Dln}2_QAJv}-T^!T(ZqejjotEW2K_<5uAl~HUx)pM~wLSs_i9ba5r zATs0OZ;xBAzV!))kK_T$Is3U3F+zv{2yFRPS%ad8XAJE(Z%P%Cs;~p& zK9s03I&$1|$}H$Nc4%HQO+WfWAk4Q<&dE%V82CJ<@Ll1hf>PnYYFNF7mZmliLd&{0 zShzB({P!4DEGP5Zrw4mI?_$zzZYERQrsQpeB;`=>zX5L);pB~f8Rj?s1dCe@X9>AI z7q$EGil1j5*z6?dW4`2tkYWcw8~fnM$mNzxqp;f^?U^=MV_}>p+#o9}D|A%aE2TUm zP`h%AO}n6`Z);0}3J@rBs)Z?aTTk`_L-ki>_aEOPOjM3=*t?0C*-sh>BH>Q-1uzeP zD|_tp_&&ME=Nv{eef?jZLbO1bZv}-FXu6ykajpv8j4A;$r(c=qFmrm&rJMnUpWb)E4GCfZu{Xej?ATsB)iq^&ra4YBgx4Rmr1oqk~^HfyDe& zRu#XaPOdOZem6FCGep2HrgwRONAatFbvZVw>|_fm$q9*!*Lx$M*_W^1coD5E#(7E{ z-a4aJ01*eIVbMp$ks9gr?T5-uJZr#MC7+iNK>z@*J z7I;P^tAd}Xv)i^-;jVw;Y4dEXQy9xY!+ybmknT2yGyqq@tpJ(fzQSi+3GyoV2v@U{ z%!{b+fE0Qf7#}H|U|s*2#ulnjII2~=Kj**y=G&A4Vm)dgiJjj|!`r!O8`A3b*6DB> zN%D0Po22B};l8P{>1_W+fQ!Bhq-zcR zH*5oDDvKZ27?^LZ!;GK10g+HY!IFl0CM-$T#q#6jN~8l~WwjsUx+LeKID>;8@ELJ` zx6$O+oND3DpuXT-WXBH_5+2)V%yBbPodCFdO00+R9alzPwj0-VK>O$ zy0^ArmRv>krhGuoyd)#v?{iVsbZCfHF{+-wl}7c*S$Ir4IH)s}UKGF=4(=N9)zSR_ z@d8l1rlx^3$r*{|dma6b&#Z%-30fFxt$*lbd5nR)hXVs>^e^_}!I&+6dD5#7tNsc5 zH`>UMoyf7!4B{3g%%sEP7M-Owf)|ZKDkm;~Ml>hxYFNCX=WgtA)2tbrSeVmz5Xzy+ z;H!03j{Dq5ZgNbunAfsv;I#akukY!K^w)Fmi7z(RDlIv3wZ?DgNpwgF$+gsVl*01m zAHxcdROc3>=JaZ27QW-eTS{wla&lS*rBi(43vx={%TJ5pwJ)hj!u6jLmf*2(Jl;YpQHKl#%tB8Cke?X>$2t32(7b^{sGMk}qyfsaLv655`uyK~85<(J?0(}>C>;(DOSREZ@!2_>)(xvM{Jr-KB= ziWyTV|CoB2JM#hH*@xfQL@X{69>jCF^F>%jzM&CD)#WB=)?9|dNO!(sbPxDt`Qumk z`vtHOm9nEBXNMuVm(GF$gYu^zt$FbgJ~4KXHX6LDFV4xmG3-$~mc2=FcLl5&++~L$ zz$5V3NUy%V50yJSAb`T{5h_c5J2@x5Z&D2}RbP%D;?HL=3%s)DCNuJGXQ6&%f^QIM z$C9b>OXme$*&(xz@I62T{{xN9+jCWO4`zP&-fVWs(}y8Ji0`$p*Y#Xy{n;Ci??X4d zxcFr-d&4OFFrn`De<(V6%YMTd+ID(~jU1W-LN-u9T8L**3&>Xk)tmB9+HPldBxpz6 z)hg7tN6L5{-Yscu+qzR(aPP?!D~a;*GfLr&?;0}J<9a{eB0pMsWu$r%g)zLev1%%3 zTIzm8`I|?P5*r5xoW;-}&&S6nv{u`*WA_vf;o&hKV9DO;?}q}nS06khq0{btKzK8g zbrogGnfdPAt_SY;}BKJDfUj3SZ=$v zqbUMOTo;5p7LCL8AXSK$j7RINkLSTlu?ArdpWQG^mmd{Yzsrp?`6<&;Er8Hxtg|l9 zHX9oCC)62ci2-w11eb`5jUD1P1+C%GQQ`@nU({eB$ZZBC)iBKrnrgsF1N|P=9w%Ig ziF&uP(o%=M3~A7B8elq_n%aO_0a*TFXnvCZ@K08lsJUVFHiH%`=GLJ1Zp|-Kf8?si zIr1#i@P_1U#e;Z+1nr)i#Gh-%U30RUMP%gUwCK9zz3;cbd3wd@-V^Z8pmk&a%f`us z98vaIHMq8#cUUO6atBeUz2p9`l#q+VB{}cZzmQZJgzS~uXVzjC+3F5z6v{LW z%`kmEyED|87&U1pPzjA&{U(V<6Mb3FI1(2N*8LG_6=5YO zAR@v-coTw&-rv0I@X<}Y33v_^$nC!DsjaK2O_3gPH!sN1bsq4dm%-PKnRNu- z|CQQpPg|7@k1-WV9Uu5&KSR9MhBkrJyBZpRg~ZJ+efTbG6%4ovNj!le6dHL$VHPB) zipY7d3z`eG3i&*bd$hO0uFCb(#VSqKW&fUhdsnR`2UwgKN=Cq2Aq{_gm~jzb!!)DV zhYDD;l~X;8{)_>r%3`1ynb~`nL0NoG<>I<#%_aCsLgM?(3{^aTh6F4QdO{$YYBDqO zX&H(ju1%f=Ifo^p_H6q)x77XH2oF8S+Khaoa&9QkM`*u9v~E)hD@5@hK3rM_RJUK& zdv+QaItCc6{=^}(w!+^7=``!{H%J45CK=h}IT6N#&MuXr*8j3q);SM1+FsTlYKyrke z6c>hX^1G=T_sSo^{PQ*sNx;>SavcBot?KXG1V6d6#RMGJt|9Q$u2@obJ|{n7Jn0W* z?syDoxN6}J*N}+Xtjhk-v`!W6{7uYQU9%j98e_owZ!g5;KdS%Zefs%KP#Lwu=T#Za zyLXQU_)NZ7cil%(hVY>m&>UTs*`2cpKwxDj7=_l_B&QI+{}DsAEH`2m(*@}m z5AxW1tCt)y+uI-P5UAB*?RT3R1DGy&f|LkwO0q4^)TL-Nh*c;=6<92KYwPPHPO~EW zlK@nqRER5hF0B&P6IS_M!hCLwFmv?-pqzg!Z)oaA`a;E3Gh6GLVUO)DB>X%x82B5W zq~vE)LZy?{ZD_Y=59g+;VIEA%4h$A={

)XnM)HI;@0$_=_^Mv3dVT)%|1Un7Hes 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 a*@OP)fc0eq256RsKxnG!s$?nM_W2Lk%+uol literal 63000 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png index e470f5cdd256318b88a047adde331a6c8bdfd8db..3e963f7771a3585ce7f619b9dcf983966d7d641f 100644 GIT binary patch literal 47452 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 Sr0#V(o=^o1`4U-+m;VoChs<37 literal 47182 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%0DI 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 l@+>?d{^sH~;{X5i@HFCNL6qtm=h`MRu diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-win32.png index 9afa4a05d380826f5a2c3bd427a71420e23656d4..9b6b0abd9967fc8683cf40fd5b573fb8e829e5b4 100644 GIT binary patch literal 42824 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

2}{t{&hDCw5EEy?+wI(ekueAGVSq(u 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 literal 44026 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png index d357a9c38a4c6022a2713c83a229e58dc3e6d663..3cfffce171e4c90949d6ffe072d95db75aca0a0b 100644 GIT binary patch literal 63452 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 literal 63154 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 uH)rzvJck-nl`TY;THTK*9 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-win32.png index defc35acf93bbbcee2202549f4865833ebc71843..aadcc11a5c11852f86d56a54b8f6b1f4b1909b89 100644 GIT binary patch literal 58140 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 z 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 g=Ki-4aTONJ&eBGzdsHNJ*EJ(v5&L2$Jt) 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::json_schema(&mut generator); Some(#docs_crate::StdLibFnArg { name: "".to_string(), type_: #ret_ty_string.to_string(), - schema: <#return_type_inner>::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } @@ -414,17 +417,19 @@ fn do_stdlib_inner( vec![#(#tags),*] } - fn args(&self) -> Vec<#docs_crate::StdLibFnArg> { + fn args(&self, inline_subschemas: bool) -> Vec<#docs_crate::StdLibFnArg> { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + // We set this to false so we can recurse them later. + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![#(#arg_types),*] } - fn return_value(&self) -> Option<#docs_crate::StdLibFnArg> { + fn return_value(&self, inline_subschemas: bool) -> Option<#docs_crate::StdLibFnArg> { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + // We set this to false so we can recurse them later. + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); #return_type diff --git a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen index a2aa4d1da..e538d7b1b 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for SomeFn { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "data".to_string(), type_: "Foo".to_string(), schema: Foo::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "i32".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/args_with_refs.gen b/src/wasm-lib/derive-docs/tests/args_with_refs.gen index cde1aad82..ac8b48dbb 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_refs.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_refs.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for SomeFn { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "data".to_string(), type_: "string".to_string(), schema: str::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "i32".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/array.gen b/src/wasm-lib/derive-docs/tests/array.gen index 733270d5c..25ad55c3e 100644 --- a/src/wasm-lib/derive-docs/tests/array.gen +++ b/src/wasm-lib/derive-docs/tests/array.gen @@ -107,26 +107,29 @@ impl crate::docs::StdLibFn for Show { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "[number]".to_string(), schema: <[f64; 2usize]>::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "number".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/box.gen b/src/wasm-lib/derive-docs/tests/box.gen index b88ebfa24..e60404f59 100644 --- a/src/wasm-lib/derive-docs/tests/box.gen +++ b/src/wasm-lib/derive-docs/tests/box.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Show { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "number".to_string(), schema: f64::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "number".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen index 2af1e49f2..916dd55e2 100644 --- a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen +++ b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen @@ -108,26 +108,29 @@ impl crate::docs::StdLibFn for MyFunc { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "kittycad::types::InputFormat".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: false, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = >::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "[Sketch]".to_string(), - schema: >::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/lineTo.gen b/src/wasm-lib/derive-docs/tests/lineTo.gen index 77d3a3172..793d9fbf0 100644 --- a/src/wasm-lib/derive-docs/tests/lineTo.gen +++ b/src/wasm-lib/derive-docs/tests/lineTo.gen @@ -108,34 +108,38 @@ impl crate::docs::StdLibFn for LineTo { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![ crate::docs::StdLibFnArg { name: "data".to_string(), type_: "LineToData".to_string(), schema: LineToData::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }, crate::docs::StdLibFnArg { name: "sketch".to_string(), type_: "Sketch".to_string(), schema: Sketch::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }, ] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "Sketch".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/min.gen b/src/wasm-lib/derive-docs/tests/min.gen index 1b5fbb3bf..8b0f2e1a9 100644 --- a/src/wasm-lib/derive-docs/tests/min.gen +++ b/src/wasm-lib/derive-docs/tests/min.gen @@ -107,26 +107,29 @@ impl crate::docs::StdLibFn for Min { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "[number]".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "number".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/option.gen b/src/wasm-lib/derive-docs/tests/option.gen index ab593deb6..be835c92b 100644 --- a/src/wasm-lib/derive-docs/tests/option.gen +++ b/src/wasm-lib/derive-docs/tests/option.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Show { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "number".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: false, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "number".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/option_input_format.gen b/src/wasm-lib/derive-docs/tests/option_input_format.gen index dc90f224e..2a2268140 100644 --- a/src/wasm-lib/derive-docs/tests/option_input_format.gen +++ b/src/wasm-lib/derive-docs/tests/option_input_format.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Import { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "kittycad::types::InputFormat".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: false, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "number".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen index 95d5bdf63..6eb941eda 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Import { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "kittycad::types::InputFormat".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: false, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = >::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "[Sketch]".to_string(), - schema: >::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen index 74fbf52a8..5846c757c 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Import { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "kittycad::types::InputFormat".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: false, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = >::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "[Sketch]".to_string(), - schema: >::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/show.gen b/src/wasm-lib/derive-docs/tests/show.gen index d908ffdad..c50314e2d 100644 --- a/src/wasm-lib/derive-docs/tests/show.gen +++ b/src/wasm-lib/derive-docs/tests/show.gen @@ -74,26 +74,29 @@ impl crate::docs::StdLibFn for Show { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![crate::docs::StdLibFnArg { name: "args".to_string(), type_: "[number]".to_string(), schema: >::json_schema(&mut generator), + schema_definitions: generator.definitions().clone(), required: true, }] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = <()>::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "()".to_string(), - schema: <()>::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen index 61ada1040..8d30de40a 100644 --- a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen +++ b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen @@ -74,21 +74,23 @@ impl crate::docs::StdLibFn for SomeFunction { vec![] } - fn args(&self) -> Vec { + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); vec![] } - fn return_value(&self) -> Option { + fn return_value(&self, inline_subschemas: bool) -> Option { let mut settings = schemars::gen::SchemaSettings::openapi3(); - settings.inline_subschemas = true; + settings.inline_subschemas = inline_subschemas; let mut generator = schemars::gen::SchemaGenerator::new(settings); + let schema = ::json_schema(&mut generator); Some(crate::docs::StdLibFnArg { name: "".to_string(), type_: "i32".to_string(), - schema: ::json_schema(&mut generator), + schema, + schema_definitions: generator.definitions().clone(), required: true, }) } diff --git a/src/wasm-lib/kcl/src/docs/gen_std_tests.rs b/src/wasm-lib/kcl/src/docs/gen_std_tests.rs index d305876a9..6a9da1fb0 100644 --- a/src/wasm-lib/kcl/src/docs/gen_std_tests.rs +++ b/src/wasm-lib/kcl/src/docs/gen_std_tests.rs @@ -314,16 +314,23 @@ fn generate_function(internal_fn: Box) -> Result) -> Result) -> Result>(), - "return_value": internal_fn.return_value().map(|ret| { + "return_value": internal_fn.return_value(false).map(|ret| { json!({ "type_": ret.type_, "description": ret.description(), @@ -493,6 +500,8 @@ fn generate_type( // Make sure the name is pascal cased. if !(name.is_case(convert_case::Case::Pascal) + || name == "Point3d" + || name == "Point2d" || name == "CircularPattern2dData" || name == "CircularPattern3dData" || name == "LinearPattern2dData" @@ -594,6 +603,27 @@ fn recurse_and_create_references( )); }; + // If we already have a reference add the metadata to the reference if it has none. + if o.reference.is_some() { + let mut obj = o.clone(); + let t = types + .get(name) + .ok_or_else(|| anyhow::anyhow!("Failed to get type: {}", name))?; + let schemars::schema::Schema::Object(to) = t else { + return Err(anyhow::anyhow!( + "Failed to get object schema, should have not been a primitive" + )); + }; + if let Some(metadata) = obj.metadata.as_mut() { + if metadata.description.is_none() { + metadata.description = to.metadata.as_ref().and_then(|m| m.description.clone()); + } + } else { + obj.metadata = to.metadata.clone(); + } + return Ok(schemars::schema::Schema::Object(obj)); + } + // Check if this is the type we already know about. for (n, s) in types { if is_same_schema(schema, s) && name != n && !n.starts_with("[") { diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index 54741dd2c..9d3254141 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -53,6 +53,9 @@ pub struct StdLibFnArg { /// The schema of the argument. #[ts(type = "any")] pub schema: schemars::schema::Schema, + /// The schema definitions for the argument. + #[ts(type = "any")] + pub schema_definitions: schemars::Map, /// If the argument is required. pub required: bool, } @@ -86,7 +89,7 @@ impl StdLibFnArg { } pub fn description(&self) -> Option { - get_description_string_from_schema(&self.schema.clone()) + get_description_string_from_schema(&self.schema.clone(), &self.schema_definitions) } } @@ -120,10 +123,10 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { fn tags(&self) -> Vec; /// The args of the function. - fn args(&self) -> Vec; + fn args(&self, inline_subschemas: bool) -> Vec; /// The return value of the function. - fn return_value(&self) -> Option; + fn return_value(&self, inline_subschemas: bool) -> Option; /// If the function is unpublished. fn unpublished(&self) -> bool; @@ -147,8 +150,8 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { summary: self.summary(), description: self.description(), tags: self.tags(), - args: self.args(), - return_value: self.return_value(), + args: self.args(false), + return_value: self.return_value(false), unpublished: self.unpublished(), deprecated: self.deprecated(), examples: self.examples(), @@ -158,7 +161,7 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { fn fn_signature(&self) -> String { let mut signature = String::new(); signature.push_str(&format!("{}(", self.name())); - for (i, arg) in self.args().iter().enumerate() { + for (i, arg) in self.args(false).iter().enumerate() { if i > 0 { signature.push_str(", "); } @@ -169,7 +172,7 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { } } signature.push(')'); - if let Some(return_value) = self.return_value() { + if let Some(return_value) = self.return_value(false) { signature.push_str(&format!(" -> {}", return_value.type_)); } @@ -212,7 +215,7 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { fn to_autocomplete_snippet(&self) -> Result { let mut args = Vec::new(); let mut index = 0; - for arg in self.args().iter() { + for arg in self.args(true).iter() { if let Some((i, arg_str)) = arg.get_autocomplete_snippet(index)? { index = i + 1; args.push(arg_str); @@ -238,7 +241,7 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { self.summary() }, })), - parameters: Some(self.args().into_iter().map(|arg| arg.into()).collect()), + parameters: Some(self.args(true).into_iter().map(|arg| arg.into()).collect()), active_parameter, }], active_signature: Some(0), @@ -308,13 +311,22 @@ impl Clone for Box { } } -pub fn get_description_string_from_schema(schema: &schemars::schema::Schema) -> Option { +pub fn get_description_string_from_schema( + schema: &schemars::schema::Schema, + definitions: &schemars::Map, +) -> Option { if let schemars::schema::Schema::Object(o) = schema { if let Some(metadata) = &o.metadata { if let Some(description) = &metadata.description { return Some(description.to_string()); } } + + if let Some(reference) = &o.reference { + if let Some(definition) = definitions.get(reference.split('/').last().unwrap_or("")) { + return get_description_string_from_schema(definition, definitions); + } + } } None @@ -692,7 +704,7 @@ pub fn completion_item_from_enum_schema( kind: CompletionItemKind, ) -> Result { // Get the docs for the schema. - let description = get_description_string_from_schema(schema).unwrap_or_default(); + let description = get_description_string_from_schema(schema, &Default::default()).unwrap_or_default(); let schemars::schema::Schema::Object(o) = schema else { anyhow::bail!("expected object schema: {:#?}", schema); }; @@ -754,7 +766,7 @@ mod tests { #[test] fn test_deserialize_function() { - let some_function_string = r#"{"type":"StdLib","func":{"name":"line","summary":"","description":"","tags":[],"returnValue":{"type":"","required":false,"name":"","schema":{}},"args":[],"unpublished":false,"deprecated":false, "examples": []}}"#; + let some_function_string = r#"{"type":"StdLib","func":{"name":"line","summary":"","description":"","tags":[],"returnValue":{"type":"","required":false,"name":"","schema":{},"schemaDefinitions":{}},"args":[],"unpublished":false,"deprecated":false, "examples": []}}"#; let some_function: crate::ast::types::Function = serde_json::from_str(some_function_string).unwrap(); assert_eq!( diff --git a/src/wasm-lib/kcl/src/docs/templates/schema.hbs b/src/wasm-lib/kcl/src/docs/templates/schema.hbs index 6dc9afde0..cbb5870ee 100644 --- a/src/wasm-lib/kcl/src/docs/templates/schema.hbs +++ b/src/wasm-lib/kcl/src/docs/templates/schema.hbs @@ -4,18 +4,16 @@ {{#if $ref}} {{pretty_ref $ref}} +{{else if enum}} +**enum:** {{pretty_enum enum}} +{{else if type}} +**Type:** `{{type}}`{{~ #if format }} (`{{format}}`){{/if ~}} {{/if}} {{#if $schema}} **Schema:** `{{$schema}}` {{/if}} -{{#if enum}} -**enum:** {{pretty_enum enum}} -{{else if type}} -**Type:** `{{type}}` -{{/if}} - {{#if items}} {{>array}} {{/if}} diff --git a/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs b/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs index da92dae39..649959fca 100644 --- a/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs +++ b/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs @@ -41,9 +41,10 @@ fn lint_too_many_args_std_lib_function(f: Box, exp: &CallExpressio return Ok(findings); } - if exp.arguments.len() > f.args().len() { + let fn_args_len = f.args(false).len(); + if exp.arguments.len() > fn_args_len { findings.push(Z0002.at( - format!("expected {} arguments, found {}", f.args().len(), exp.arguments.len()), + format!("expected {} arguments, found {}", fn_args_len, exp.arguments.len()), SourceRange::new(exp.start, exp.end), )); } diff --git a/src/wasm-lib/kcl/src/parser/parser_impl.rs b/src/wasm-lib/kcl/src/parser/parser_impl.rs index 93018cea3..d163871ea 100644 --- a/src/wasm-lib/kcl/src/parser/parser_impl.rs +++ b/src/wasm-lib/kcl/src/parser/parser_impl.rs @@ -1651,7 +1651,7 @@ fn fn_call(i: TokenSlice) -> PResult { let args = arguments(i)?; if let Some(std_fn) = crate::std::get_stdlib_fn(&fn_name.name) { // Type check the arguments. - for (i, spec_arg) in std_fn.args().iter().enumerate() { + for (i, spec_arg) in std_fn.args(false).iter().enumerate() { let Some(arg) = &args.get(i) else { // The executor checks the number of arguments, so we don't need to check it here. continue;

J58>; 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 Z;^!ur6nl~yWPrM*wD@DOViAL9{{x?WH`M?D literal 52206 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�ew%Oc?G)wqLnSOcWTC*> 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 literal 48533 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