zcbot/software-contracts/cad.geometry.prepare.v1.json

346 lines
14 KiB
JSON

{
"capability": "cad.geometry.prepare@v1",
"display_name": "中性 CAD 几何准备",
"default_enrollment": false,
"lifecycle": {
"status": "active",
"visibility": "standard",
"replacement": null,
"detail": "生成供 ANSYS、Abaqus 等后续任务复用的中性 STEP。"
},
"output_namespace": "cad",
"input_policy": {
"suffixes": [".step", ".stp"],
"max_count": 1,
"max_bytes": 268435456,
"max_total_bytes": 268435456
},
"outputs": {
"geometry": {
"filename": "geometry.step",
"media_type": "model/step",
"relative_path": "geometry.step",
"publish": true,
"required": true
},
"geometry_recipe": {
"filename": "geometry-recipe.json",
"media_type": "application/json",
"relative_path": "geometry-recipe.json",
"publish": true,
"required": true
},
"geometry_manifest": {
"filename": "geometry-manifest.json",
"media_type": "application/json",
"relative_path": "geometry-manifest.json",
"publish": true,
"required": true
},
"geometry_preview": {
"filename": "geometry-preview.png",
"media_type": "image/png",
"relative_path": "geometry-preview.png",
"publish": true,
"required": true
},
"provenance": {
"filename": "provenance.json",
"media_type": "application/json",
"relative_path": ".meta/provenance.json",
"publish": false,
"required": true
}
},
"feature_path": ["operation", "prepare", "type"],
"features": {
"inspect": "1.0.0",
"primitive": "1.0.0",
"recipe": "1.0.0"
},
"summary": {
"title_path": ["operation", "prepare", "title"]
},
"legacy_runtime": null,
"workspace": null,
"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": ["prepare"],
"additionalProperties": false,
"properties": {
"prepare": {
"oneOf": [
{"$ref": "#/$defs/inspect"},
{"$ref": "#/$defs/primitive_prepare"},
{"$ref": "#/$defs/recipe_prepare"}
]
}
}
},
"outputs": {"type": "array", "maxItems": 0}
},
"$defs": {
"finite": {"type": "number", "minimum": -1000000, "maximum": 1000000},
"positive": {"type": "number", "exclusiveMinimum": 0, "maximum": 1000000},
"nonnegative": {"type": "number", "minimum": 0, "maximum": 1000000},
"vector3": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"$ref": "#/$defs/finite"}
},
"direction3": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"type": "number", "minimum": -1000000000000, "maximum": 1000000000000}
},
"point3": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"$ref": "#/$defs/finite"}
},
"expected_count": {
"type": "integer", "minimum": 1, "maximum": 128,
"description": "Exact selected topology count assertion."
},
"extreme_face": {
"type": "object",
"required": ["type", "axis", "side"],
"additionalProperties": false,
"properties": {
"type": {"const": "extreme_face"},
"axis": {"enum": ["x", "y", "z"]},
"side": {"enum": ["min", "max"]},
"tolerance": {"$ref": "#/$defs/nonnegative"},
"angle_tolerance_degrees": {"type": "number", "minimum": 0, "maximum": 15, "default": 5},
"expected_count": {"$ref": "#/$defs/expected_count"}
}
},
"planar_faces": {
"type": "object",
"required": ["type", "normal", "offset", "tolerance"],
"additionalProperties": false,
"properties": {
"type": {"const": "planar_faces"},
"normal": {"$ref": "#/$defs/direction3"},
"offset": {"$ref": "#/$defs/finite"},
"tolerance": {"$ref": "#/$defs/positive"},
"angle_tolerance_degrees": {"type": "number", "minimum": 0, "maximum": 15, "default": 5},
"expected_count": {"$ref": "#/$defs/expected_count"}
}
},
"surface_faces": {
"type": "object",
"required": ["type", "surface"],
"additionalProperties": false,
"properties": {
"type": {"const": "surface_faces"},
"surface": {"enum": ["plane", "cylinder", "cone", "sphere", "torus", "other"]},
"expected_count": {"$ref": "#/$defs/expected_count"}
}
},
"face_selector": {
"oneOf": [
{"$ref": "#/$defs/extreme_face"},
{"$ref": "#/$defs/planar_faces"},
{"$ref": "#/$defs/surface_faces"}
]
},
"edge_selector": {
"type": "object",
"required": ["type", "curve"],
"additionalProperties": false,
"properties": {
"type": {"const": "curve_edges"},
"curve": {"enum": ["line", "circle", "ellipse", "spline", "other"]},
"expected_count": {"$ref": "#/$defs/expected_count"}
}
},
"solid_selector": {
"type": "object",
"required": ["type"],
"additionalProperties": false,
"properties": {
"type": {"const": "all_solids"},
"expected_count": {"$ref": "#/$defs/expected_count"}
}
},
"region": {
"type": "object",
"required": ["name", "topology", "selector"],
"additionalProperties": false,
"allOf": [
{"if": {"properties": {"topology": {"const": "face"}}, "required": ["topology"]}, "then": {"properties": {"selector": {"$ref": "#/$defs/face_selector"}}}},
{"if": {"properties": {"topology": {"const": "edge"}}, "required": ["topology"]}, "then": {"properties": {"selector": {"$ref": "#/$defs/edge_selector"}}}},
{"if": {"properties": {"topology": {"const": "solid"}}, "required": ["topology"]}, "then": {"properties": {"selector": {"$ref": "#/$defs/solid_selector"}}}}
],
"properties": {
"name": {"type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"},
"topology": {"enum": ["face", "edge", "solid"]},
"selector": {
"oneOf": [
{"$ref": "#/$defs/face_selector"},
{"$ref": "#/$defs/edge_selector"},
{"$ref": "#/$defs/solid_selector"}
]
}
}
},
"primitive": {
"oneOf": [
{
"type": "object", "required": ["shape", "length", "width", "height"], "additionalProperties": false,
"properties": {"shape": {"const": "box"}, "length": {"$ref": "#/$defs/positive"}, "width": {"$ref": "#/$defs/positive"}, "height": {"$ref": "#/$defs/positive"}}
},
{
"type": "object", "required": ["shape", "radius", "height"], "additionalProperties": false,
"properties": {"shape": {"const": "cylinder"}, "radius": {"$ref": "#/$defs/positive"}, "height": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
},
{
"type": "object", "required": ["shape", "radius", "inner_radius", "height"], "additionalProperties": false,
"properties": {"shape": {"const": "tube"}, "radius": {"$ref": "#/$defs/positive"}, "inner_radius": {"$ref": "#/$defs/positive"}, "height": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
},
{
"type": "object", "required": ["shape", "radius", "height"], "additionalProperties": false,
"properties": {"shape": {"const": "cone"}, "radius": {"$ref": "#/$defs/positive"}, "height": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
},
{
"type": "object", "required": ["shape", "radius1", "radius2", "height"], "additionalProperties": false,
"properties": {"shape": {"const": "frustum"}, "radius1": {"$ref": "#/$defs/nonnegative"}, "radius2": {"$ref": "#/$defs/nonnegative"}, "height": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
},
{
"type": "object", "required": ["shape", "radius"], "additionalProperties": false,
"properties": {"shape": {"const": "sphere"}, "radius": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
},
{
"type": "object", "required": ["shape", "x_min", "x_max", "y_min", "y_max", "z_min", "z_max"], "additionalProperties": false,
"properties": {"shape": {"const": "wedge"}, "x_min": {"$ref": "#/$defs/finite"}, "x_max": {"$ref": "#/$defs/finite"}, "y_min": {"$ref": "#/$defs/finite"}, "y_max": {"$ref": "#/$defs/finite"}, "z_min": {"$ref": "#/$defs/finite"}, "z_max": {"$ref": "#/$defs/finite"}}
},
{
"type": "object", "required": ["shape", "major_radius", "minor_radius"], "additionalProperties": false,
"properties": {"shape": {"const": "torus"}, "major_radius": {"$ref": "#/$defs/positive"}, "minor_radius": {"$ref": "#/$defs/positive"}, "angle_degrees": {"type": "number", "exclusiveMinimum": 0, "maximum": 360}}
}
]
},
"profile": {
"type": "object",
"required": ["id", "points"],
"additionalProperties": false,
"properties": {
"id": {"$ref": "#/$defs/name"},
"points": {
"type": "array", "minItems": 3, "maxItems": 512,
"items": {"$ref": "#/$defs/point3"}
}
}
},
"name": {"type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"},
"step": {
"type": "object",
"required": ["id", "op"],
"additionalProperties": false,
"properties": {
"id": {"$ref": "#/$defs/name"},
"op": {"enum": ["box", "cylinder", "tube", "cone", "frustum", "sphere", "wedge", "torus", "import_step", "extrude", "revolve", "sweep", "loft", "union", "cut", "intersect", "fillet", "chamfer", "shell", "translate", "rotate", "mirror", "linear_pattern", "circular_pattern", "combine"]},
"primitive": {"$ref": "#/$defs/primitive"},
"input": {"const": "geometry"},
"profile": {"$ref": "#/$defs/name"},
"profiles": {"type": "array", "minItems": 2, "maxItems": 32, "uniqueItems": true, "items": {"$ref": "#/$defs/name"}},
"target": {"$ref": "#/$defs/name"},
"targets": {"type": "array", "minItems": 1, "maxItems": 64, "uniqueItems": true, "items": {"$ref": "#/$defs/name"}},
"tools": {"type": "array", "minItems": 1, "maxItems": 64, "uniqueItems": true, "items": {"$ref": "#/$defs/name"}},
"vector": {"$ref": "#/$defs/vector3"},
"axis_start": {"$ref": "#/$defs/point3"},
"axis_end": {"$ref": "#/$defs/point3"},
"angle_degrees": {"type": "number", "exclusiveMinimum": -360, "maximum": 360},
"path": {"type": "array", "minItems": 2, "maxItems": 512, "items": {"$ref": "#/$defs/point3"}},
"selector": {"oneOf": [{"$ref": "#/$defs/face_selector"}, {"$ref": "#/$defs/edge_selector"}]},
"radius": {"$ref": "#/$defs/positive"},
"distance": {"$ref": "#/$defs/positive"},
"thickness": {"$ref": "#/$defs/positive"},
"plane": {"enum": ["XY", "XZ", "YZ"]},
"count": {"type": "integer", "minimum": 2, "maximum": 128},
"spacing": {"$ref": "#/$defs/positive"},
"center": {"$ref": "#/$defs/point3"}
}
},
"base_prepare": {
"type": "object",
"required": ["type", "title", "canonical_unit", "regions"],
"properties": {
"type": {"enum": ["inspect", "primitive", "recipe"]},
"title": {"type": "string", "minLength": 1, "maxLength": 160},
"canonical_unit": {"enum": ["mm", "m"]},
"regions": {"type": "array", "maxItems": 64, "items": {"$ref": "#/$defs/region"}}
}
},
"inspect": {
"allOf": [
{"$ref": "#/$defs/base_prepare"},
{
"type": "object",
"required": ["type", "title", "canonical_unit", "regions", "geometry"],
"additionalProperties": false,
"properties": {
"type": {"const": "inspect"},
"title": true, "canonical_unit": true, "regions": true,
"geometry": {"type": "object", "required": ["input"], "additionalProperties": false, "properties": {"input": {"const": "geometry"}}}
}
}
]
},
"primitive_prepare": {
"allOf": [
{"$ref": "#/$defs/base_prepare"},
{
"type": "object",
"required": ["type", "title", "canonical_unit", "regions", "primitive"],
"additionalProperties": false,
"properties": {"type": {"const": "primitive"}, "title": true, "canonical_unit": true, "regions": true, "primitive": {"$ref": "#/$defs/primitive"}}
}
]
},
"recipe_prepare": {
"allOf": [
{"$ref": "#/$defs/base_prepare"},
{
"type": "object",
"required": ["type", "title", "canonical_unit", "regions", "recipe"],
"additionalProperties": false,
"properties": {
"type": {"const": "recipe"}, "title": true, "canonical_unit": true, "regions": true,
"recipe": {
"type": "object",
"required": ["profiles", "steps", "result"],
"additionalProperties": false,
"properties": {
"profiles": {"type": "array", "maxItems": 64, "items": {"$ref": "#/$defs/profile"}},
"steps": {"type": "array", "minItems": 1, "maxItems": 128, "items": {"$ref": "#/$defs/step"}},
"result": {"$ref": "#/$defs/name"}
}
}
}
}
]
}
}
}
}