122 lines
8.1 KiB
JSON
122 lines
8.1 KiB
JSON
{
|
|
"capability": "freecad.model.author@v1",
|
|
"display_name": "FreeCAD 受控建模",
|
|
"default_enrollment": false,
|
|
"output_namespace": "freecad",
|
|
"input_policy": {
|
|
"suffixes": [".step", ".stp"],
|
|
"max_count": 1,
|
|
"max_bytes": 268435456,
|
|
"max_total_bytes": 268435456
|
|
},
|
|
"outputs": {
|
|
"project": {"filename": "model.FCStd", "media_type": "application/vnd.freecad", "relative_path": "model.FCStd", "publish": true, "required": true},
|
|
"geometry_step": {"filename": "model.step", "media_type": "model/step", "relative_path": "model.step", "publish": true, "required": true},
|
|
"preview": {"filename": "model-preview.png", "media_type": "image/png", "relative_path": "model-preview.png", "publish": true, "required": true},
|
|
"model_recipe": {"filename": "model-recipe.json", "media_type": "application/json", "relative_path": "model-recipe.json", "publish": true, "required": true},
|
|
"model_manifest": {"filename": "model-manifest.json", "media_type": "application/json", "relative_path": "model-manifest.json", "publish": true, "required": true},
|
|
"provenance": {"filename": "provenance.json", "media_type": "application/json", "relative_path": ".meta/provenance.json", "publish": false, "required": true}
|
|
},
|
|
"feature_path": ["operation", "model", "type"],
|
|
"features": {"recipe": "1.0.0"},
|
|
"summary": {"title_path": ["operation", "model", "title"]},
|
|
"legacy_runtime": null,
|
|
"workspace": {
|
|
"state_output": "project",
|
|
"preview_outputs": ["preview"],
|
|
"required_adapter_version": "1.0.0"
|
|
},
|
|
"request_schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"type": "object",
|
|
"x-maxBytes": 262144,
|
|
"required": ["schema_version", "inputs", "operation", "outputs"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"schema_version": {"const": 1},
|
|
"inputs": {
|
|
"type": "array", "maxItems": 1,
|
|
"items": {
|
|
"type": "object", "required": ["key", "artifact_id"], "additionalProperties": false,
|
|
"properties": {"key": {"const": "geometry"}, "artifact_id": {"type": "string", "format": "uuid"}}
|
|
}
|
|
},
|
|
"operation": {
|
|
"type": "object", "required": ["model"], "additionalProperties": false,
|
|
"properties": {"model": {"$ref": "#/$defs/model"}}
|
|
},
|
|
"outputs": {"type": "array", "maxItems": 0}
|
|
},
|
|
"$defs": {
|
|
"identifier": {"type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$"},
|
|
"finite": {"type": "number", "minimum": -1000000, "maximum": 1000000},
|
|
"positive": {"type": "number", "exclusiveMinimum": 0, "maximum": 1000000},
|
|
"parameterRef": {
|
|
"type": "object", "required": ["parameter"], "additionalProperties": false,
|
|
"properties": {"parameter": {"$ref": "#/$defs/identifier"}}
|
|
},
|
|
"numberValue": {"oneOf": [{"$ref": "#/$defs/finite"}, {"$ref": "#/$defs/parameterRef"}]},
|
|
"positiveValue": {"oneOf": [{"$ref": "#/$defs/positive"}, {"$ref": "#/$defs/parameterRef"}]},
|
|
"vector3": {"type": "array", "minItems": 3, "maxItems": 3, "items": {"$ref": "#/$defs/numberValue"}},
|
|
"resultRef": {"$ref": "#/$defs/identifier"},
|
|
"box": {
|
|
"type": "object", "required": ["id", "op", "length", "width", "height"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "box"}, "length": {"$ref": "#/$defs/positiveValue"}, "width": {"$ref": "#/$defs/positiveValue"}, "height": {"$ref": "#/$defs/positiveValue"}}
|
|
},
|
|
"cylinder": {
|
|
"type": "object", "required": ["id", "op", "radius", "height"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "cylinder"}, "radius": {"$ref": "#/$defs/positiveValue"}, "height": {"$ref": "#/$defs/positiveValue"}, "angle_degrees": {"$ref": "#/$defs/positiveValue"}}
|
|
},
|
|
"cone": {
|
|
"type": "object", "required": ["id", "op", "radius1", "radius2", "height"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "cone"}, "radius1": {"$ref": "#/$defs/numberValue"}, "radius2": {"$ref": "#/$defs/numberValue"}, "height": {"$ref": "#/$defs/positiveValue"}, "angle_degrees": {"$ref": "#/$defs/positiveValue"}}
|
|
},
|
|
"sphere": {
|
|
"type": "object", "required": ["id", "op", "radius"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "sphere"}, "radius": {"$ref": "#/$defs/positiveValue"}, "angle1_degrees": {"$ref": "#/$defs/numberValue"}, "angle2_degrees": {"$ref": "#/$defs/numberValue"}, "angle3_degrees": {"$ref": "#/$defs/positiveValue"}}
|
|
},
|
|
"torus": {
|
|
"type": "object", "required": ["id", "op", "major_radius", "minor_radius"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "torus"}, "major_radius": {"$ref": "#/$defs/positiveValue"}, "minor_radius": {"$ref": "#/$defs/positiveValue"}, "angle1_degrees": {"$ref": "#/$defs/numberValue"}, "angle2_degrees": {"$ref": "#/$defs/numberValue"}, "angle3_degrees": {"$ref": "#/$defs/positiveValue"}}
|
|
},
|
|
"importStep": {
|
|
"type": "object", "required": ["id", "op", "input"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "import_step"}, "input": {"const": "geometry"}}
|
|
},
|
|
"boolean": {
|
|
"type": "object", "required": ["id", "op", "target", "tools"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"enum": ["union", "cut", "intersect"]}, "target": {"$ref": "#/$defs/resultRef"}, "tools": {"type": "array", "minItems": 1, "maxItems": 32, "uniqueItems": true, "items": {"$ref": "#/$defs/resultRef"}}}
|
|
},
|
|
"translate": {
|
|
"type": "object", "required": ["id", "op", "target", "vector"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "translate"}, "target": {"$ref": "#/$defs/resultRef"}, "vector": {"$ref": "#/$defs/vector3"}}
|
|
},
|
|
"rotate": {
|
|
"type": "object", "required": ["id", "op", "target", "axis_point", "axis_direction", "angle_degrees"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "rotate"}, "target": {"$ref": "#/$defs/resultRef"}, "axis_point": {"$ref": "#/$defs/vector3"}, "axis_direction": {"$ref": "#/$defs/vector3"}, "angle_degrees": {"$ref": "#/$defs/numberValue"}}
|
|
},
|
|
"combine": {
|
|
"type": "object", "required": ["id", "op", "targets"], "additionalProperties": false,
|
|
"properties": {"id": {"$ref": "#/$defs/identifier"}, "op": {"const": "combine"}, "targets": {"type": "array", "minItems": 1, "maxItems": 64, "uniqueItems": true, "items": {"$ref": "#/$defs/resultRef"}}}
|
|
},
|
|
"step": {"oneOf": [{"$ref": "#/$defs/box"}, {"$ref": "#/$defs/cylinder"}, {"$ref": "#/$defs/cone"}, {"$ref": "#/$defs/sphere"}, {"$ref": "#/$defs/torus"}, {"$ref": "#/$defs/importStep"}, {"$ref": "#/$defs/boolean"}, {"$ref": "#/$defs/translate"}, {"$ref": "#/$defs/rotate"}, {"$ref": "#/$defs/combine"}]},
|
|
"preview": {
|
|
"type": "object", "additionalProperties": false,
|
|
"properties": {"width": {"type": "integer", "minimum": 320, "maximum": 1600}, "height": {"type": "integer", "minimum": 240, "maximum": 1600}, "background": {"type": "string", "pattern": "^#[0-9A-Fa-f]{6}$"}}
|
|
},
|
|
"model": {
|
|
"type": "object", "required": ["type", "recipe_version", "title", "unit", "steps", "result"], "additionalProperties": false,
|
|
"properties": {
|
|
"type": {"const": "recipe"}, "recipe_version": {"const": 1},
|
|
"title": {"type": "string", "minLength": 1, "maxLength": 160},
|
|
"unit": {"const": "mm"},
|
|
"parameters": {"type": "object", "maxProperties": 64, "propertyNames": {"$ref": "#/$defs/identifier"}, "additionalProperties": {"$ref": "#/$defs/finite"}},
|
|
"steps": {"type": "array", "minItems": 1, "maxItems": 128, "items": {"$ref": "#/$defs/step"}},
|
|
"result": {"$ref": "#/$defs/resultRef"},
|
|
"preview": {"$ref": "#/$defs/preview"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|