346 lines
14 KiB
JSON
346 lines
14 KiB
JSON
{
|
||
"capability": "cad.geometry.prepare@v1",
|
||
"display_name": "仿真几何准备(STEP)",
|
||
"default_enrollment": false,
|
||
"lifecycle": {
|
||
"status": "active",
|
||
"visibility": "standard",
|
||
"replacement": null,
|
||
"detail": "用于 STEP、三维实体及 ANSYS/Abaqus 仿真前处理几何;平面图、户型图和设备布局请使用二维 CAD 工程制图。"
|
||
},
|
||
"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"}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|