346 lines
14 KiB
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"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|