From 9bf2ab197d0c414383b9b17eb4a069a94683e0aa Mon Sep 17 00:00:00 2001 From: chenshijue <24121145@bjtu.edu.cn> Date: Fri, 7 Aug 2026 16:02:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9B=AE=E5=BD=95=E3=80=8Cjs?= =?UTF-8?q?on=E8=8C=83=E4=BE=8B=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json范例/planetary_joint.sop.v2.json | 114 --------- json范例/planetary_joint.sop.v2.schema.json | 256 -------------------- 2 files changed, 370 deletions(-) delete mode 100644 json范例/planetary_joint.sop.v2.json delete mode 100644 json范例/planetary_joint.sop.v2.schema.json diff --git a/json范例/planetary_joint.sop.v2.json b/json范例/planetary_joint.sop.v2.json deleted file mode 100644 index 10bf991..0000000 --- a/json范例/planetary_joint.sop.v2.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "schema": "simplecad.std.planetary_joint.sop.v2", - "design_id": "joint_module_t100_t40_t20_v2", - "units": "millimetre_degree", - "axis_convention": {"main_axis": "x", "radial_plane": "yz", "right_handed": true}, - "assembly_layout": { - "method": "semantic_axial_orbit", - "calibration_role": "offline_dimensions_only", - "rules": [ - {"selector":"instance:main_case","mode":"root"}, - {"selector":"instance:motor","mode":"coaxial","axial_mm":2.0,"local_axis":"y","axis_direction":1,"clock_degrees":-171.257405889209}, - {"selector":"instance:back_plate","mode":"coaxial","axial_mm":8.0,"local_axis":"z","axis_direction":-1,"clock_degrees":157.5}, - {"selector":"instance:bearing_retainer","mode":"coaxial","axial_mm":65.5,"local_axis":"z","axis_direction":1,"clock_degrees":-135.0}, - {"selector":"instance:carrier_bearing","mode":"coaxial","axial_mm":61.0,"local_axis":"z","axis_direction":1,"clock_degrees":145.793046}, - {"selector":"instance:carrier_inner","mode":"coaxial","axial_mm":56.2,"local_axis":"z","axis_direction":-1,"clock_degrees":-155.189147}, - {"selector":"instance:carrier_outer","mode":"coaxial","axial_mm":67.5,"local_axis":"z","axis_direction":-1,"clock_degrees":-155.189147}, - {"selector":"instance:magnet","mode":"coaxial","axial_mm":-1.7,"local_axis":"z","axis_direction":-1,"clock_degrees":119.787534}, - {"selector":"instance:magnet_holder","mode":"coaxial","axial_mm":10.7,"local_axis":"z","axis_direction":-1,"clock_degrees":61.498736}, - {"selector":"instance:controller_mount","mode":"coaxial","axial_mm":0.0,"radial_mm":4.0,"radial_angle_degrees":112.5,"local_axis":"z","axis_direction":-1,"clock_degrees":67.5}, - {"selector":"instance:motor_coupling","mode":"coaxial","axial_mm":45.0,"local_axis":"z","axis_direction":1,"clock_degrees":-37.004915}, - {"selector":"instance:ring_gear","mode":"coaxial","axial_mm":49.7,"local_axis":"x","axis_direction":1,"clock_degrees":-22.5}, - {"selector":"instance:sun_gear","mode":"coaxial","axial_mm":46.0,"local_axis":"x","axis_direction":1,"clock_degrees":52.995085}, - {"selector":"definition:planet_gear","mode":"orbit","axial_mm":53.5,"orbit_phase_degrees":-174.810852906765,"local_axis":"x","axis_direction":-1,"clock_degrees":145.90418,"clock_step_degrees":180.0}, - {"selector":"definition:mf128_bearing","mode":"orbit","axial_mm":49.7,"orbit_phase_degrees":-174.810852906765,"local_axis":"z","axis_direction":1,"clock_degrees":0.0,"clock_step_degrees":120.0}, - {"selector":"definition:planet_pin_nut","mode":"orbit","axial_mm":49.7,"orbit_phase_degrees":-174.810852906765,"local_axis":"z","axis_direction":-1,"clock_degrees":0.0,"clock_step_degrees":120.0} - ] - }, - "definitions": [ - {"id":"motor_3500","family":"replaceable_motor_module","generator":"simplecadapi.std.planetary_joint.make_motor_module_rassembly","source_mode":"cots_step","maturity":"cots_step_verified","cots_asset":{"path":"simplecadapi/std/assets/3500-Motor_part2.cots.step","sha256":"fc132c44ab95e395aa444942303856534708ac7e50098dd006401b0a7830697d","solid_count":46,"geometry_editability":"immutable"},"connectors":[{"id":"mount","kind":"mount"},{"id":"output_axis","kind":"revolute_axis"}]}, - {"id":"back_plate","family":"windowed_annular_plate","generator":"simplecadapi.std.planetary_joint.make_back_plate_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"controller_mount","kind":"mount"}]}, - {"id":"bearing_retainer","family":"counterbored_retainer_ring","generator":"simplecadapi.std.planetary_joint.make_bearing_retainer_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"carrier_bearing","family":"radial_bearing","generator":"simplecadapi.std.bearing.make_bearing_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"bearing_seat"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"carrier_inner","family":"planet_carrier_plate","generator":"simplecadapi.std.planetary_joint.make_carrier_inner_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"outer_pair","kind":"mount"},{"id":"planet_axis_0","kind":"revolute_axis"},{"id":"planet_axis_1","kind":"revolute_axis"},{"id":"planet_axis_2","kind":"revolute_axis"}]}, - {"id":"carrier_outer","family":"planet_carrier_plate","generator":"simplecadapi.std.planetary_joint.make_carrier_outer_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"planet_axis_0","kind":"revolute_axis"},{"id":"planet_axis_1","kind":"revolute_axis"},{"id":"planet_axis_2","kind":"revolute_axis"}]}, - {"id":"magnet","family":"cylindrical_magnet","generator":"simplecadapi.std.planetary_joint.make_magnet_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"magnet_holder","family":"slotted_shaft_hub","generator":"simplecadapi.std.planetary_joint.make_magnet_holder_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"magnet_seat","kind":"shaft_hub"}]}, - {"id":"main_case","family":"windowed_cylindrical_cage","generator":"simplecadapi.std.planetary_joint.make_main_case_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"stage_axis","kind":"gear_axis"},{"id":"sun_axis","kind":"gear_axis"},{"id":"carrier_inner_mount","kind":"revolute_axis"},{"id":"carrier_outer_mount","kind":"mount"},{"id":"motor_mount","kind":"mount"},{"id":"magnet_holder_mount","kind":"mount"},{"id":"bearing_mount","kind":"bearing_seat"},{"id":"retainer_mount","kind":"mount"},{"id":"back_plate_mount","kind":"mount"}]}, - {"id":"mf128_bearing","family":"flanged_radial_bearing","generator":"simplecadapi.std.planetary_joint.make_bearing_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"bearing_seat"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"gear_seat","kind":"bearing_seat"}]}, - {"id":"controller_mount","family":"four_arm_controller_mount","generator":"simplecadapi.std.planetary_joint.make_controller_mount_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"coupling","family":"shaft_hub_coupling","generator":"simplecadapi.std.planetary_joint.make_motor_coupling_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"sun_seat","kind":"shaft_hub"}]}, - {"id":"planet_gear","family":"involute_spur_gear","generator":"simplecadapi.std.planetary_joint.make_planet_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"planet_pin_nut","family":"stepped_planet_pin","generator":"simplecadapi.std.planetary_joint.make_planet_pin_nut_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"ring_gear","family":"involute_internal_ring_gear","generator":"simplecadapi.std.planetary_joint.make_ring_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}, - {"id":"sun_gear","family":"involute_spur_gear","generator":"simplecadapi.std.planetary_joint.make_sun_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]} - ], - "instances": [ - {"id":"motor","definition_id":"motor_3500"},{"id":"back_plate","definition_id":"back_plate"},{"id":"bearing_retainer","definition_id":"bearing_retainer"},{"id":"carrier_bearing","definition_id":"carrier_bearing"},{"id":"carrier_inner","definition_id":"carrier_inner"},{"id":"carrier_outer","definition_id":"carrier_outer"},{"id":"magnet","definition_id":"magnet"},{"id":"magnet_holder","definition_id":"magnet_holder"},{"id":"main_case","definition_id":"main_case"},{"id":"controller_mount","definition_id":"controller_mount"},{"id":"motor_coupling","definition_id":"coupling"},{"id":"ring_gear","definition_id":"ring_gear"},{"id":"sun_gear","definition_id":"sun_gear"}, - {"id":"planet_0","definition_id":"planet_gear","pattern_index":0},{"id":"planet_1","definition_id":"planet_gear","pattern_index":1},{"id":"planet_2","definition_id":"planet_gear","pattern_index":2}, - {"id":"planet_bearing_0","definition_id":"mf128_bearing","pattern_index":0},{"id":"planet_bearing_1","definition_id":"mf128_bearing","pattern_index":1},{"id":"planet_bearing_2","definition_id":"mf128_bearing","pattern_index":2}, - {"id":"planet_pin_nut_0","definition_id":"planet_pin_nut","pattern_index":0},{"id":"planet_pin_nut_1","definition_id":"planet_pin_nut","pattern_index":1},{"id":"planet_pin_nut_2","definition_id":"planet_pin_nut","pattern_index":2} - ], - "expected_definition_counts": [ - {"definition_id":"motor_3500","count":1},{"definition_id":"back_plate","count":1},{"definition_id":"bearing_retainer","count":1},{"definition_id":"carrier_bearing","count":1},{"definition_id":"carrier_inner","count":1},{"definition_id":"carrier_outer","count":1},{"definition_id":"magnet","count":1},{"definition_id":"magnet_holder","count":1},{"definition_id":"main_case","count":1},{"definition_id":"mf128_bearing","count":3},{"definition_id":"controller_mount","count":1},{"definition_id":"coupling","count":1},{"definition_id":"planet_gear","count":3},{"definition_id":"planet_pin_nut","count":3},{"definition_id":"ring_gear","count":1},{"definition_id":"sun_gear","count":1} - ], - "assembly_root_instance_id": "main_case", - "assembly_relations": [ - {"id":"case_ring","type":"fixed","a":{"instance_id":"main_case","connector_id":"stage_axis"},"b":{"instance_id":"ring_gear","connector_id":"axis"}}, - {"id":"case_sun","type":"revolute","motion_role":"input","a":{"instance_id":"main_case","connector_id":"sun_axis"},"b":{"instance_id":"sun_gear","connector_id":"axis"}}, - {"id":"case_carrier","type":"revolute","motion_role":"output","a":{"instance_id":"main_case","connector_id":"carrier_inner_mount"},"b":{"instance_id":"carrier_inner","connector_id":"axis"}}, - {"id":"carrier_pair","type":"fixed","a":{"instance_id":"carrier_inner","connector_id":"outer_pair"},"b":{"instance_id":"carrier_outer","connector_id":"bottom"}}, - {"id":"case_motor","type":"fixed","a":{"instance_id":"main_case","connector_id":"motor_mount"},"b":{"instance_id":"motor","connector_id":"mount"}}, - {"id":"motor_coupling","type":"coaxial","a":{"instance_id":"motor","connector_id":"output_axis"},"b":{"instance_id":"motor_coupling","connector_id":"axis"}}, - {"id":"coupling_sun","type":"shaft_hub","a":{"instance_id":"motor_coupling","connector_id":"sun_seat"},"b":{"instance_id":"sun_gear","connector_id":"bottom"}}, - {"id":"case_back_plate","type":"fixed","a":{"instance_id":"main_case","connector_id":"back_plate_mount"},"b":{"instance_id":"back_plate","connector_id":"top"}}, - {"id":"back_controller","type":"fixed","a":{"instance_id":"back_plate","connector_id":"controller_mount"},"b":{"instance_id":"controller_mount","connector_id":"bottom"}}, - {"id":"case_retainer","type":"fixed","a":{"instance_id":"main_case","connector_id":"retainer_mount"},"b":{"instance_id":"bearing_retainer","connector_id":"bottom"}}, - {"id":"retainer_bearing","type":"bearing_support","a":{"instance_id":"main_case","connector_id":"bearing_mount"},"b":{"instance_id":"carrier_bearing","connector_id":"bottom"}}, - {"id":"carrier_holder","type":"fixed","a":{"instance_id":"main_case","connector_id":"magnet_holder_mount"},"b":{"instance_id":"magnet_holder","connector_id":"bottom"}}, - {"id":"holder_magnet","type":"coaxial","a":{"instance_id":"magnet_holder","connector_id":"magnet_seat"},"b":{"instance_id":"magnet","connector_id":"bottom"}}, - {"id":"p0_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-64.53167251667816,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_0"},"b":{"instance_id":"planet_0","connector_id":"axis"}}, - {"id":"p1_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-37.44500372242583,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_1"},"b":{"instance_id":"planet_1","connector_id":"axis"}}, - {"id":"p2_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-73.5259251169227,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_2"},"b":{"instance_id":"planet_2","connector_id":"axis"}}, - {"id":"p0_bearing","type":"bearing_support","phase_offset_degrees":36.00649279656336,"a":{"instance_id":"planet_0","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_0","connector_id":"gear_seat"}}, - {"id":"p1_bearing","type":"bearing_support","phase_offset_degrees":-46.20734049393244,"a":{"instance_id":"planet_1","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_1","connector_id":"gear_seat"}}, - {"id":"p2_bearing","type":"bearing_support","phase_offset_degrees":75.40929304722758,"a":{"instance_id":"planet_2","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_2","connector_id":"gear_seat"}}, - {"id":"p0_nut","type":"coaxial","phase_offset_degrees":-22.90017962687879,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_0"},"b":{"instance_id":"planet_pin_nut_0","connector_id":"axis"}}, - {"id":"p1_nut","type":"coaxial","phase_offset_degrees":34.66246921060146,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_1"},"b":{"instance_id":"planet_pin_nut_1","connector_id":"axis"}}, - {"id":"p2_nut","type":"coaxial","phase_offset_degrees":-169.91053711858657,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_2"},"b":{"instance_id":"planet_pin_nut_2","connector_id":"axis"}} - ], - "transmission": { - "type":"simple_planetary","module_mm":0.8,"pressure_angle_deg":20.0, - "teeth":{"sun":20,"planet":40,"ring":100},"planet_count":3, - "center_radius_mm":24.0,"center_tolerance_mm":0.01, - "fixed_member":"ring_gear","input_member":"sun_gear","output_member":"carrier", - "fixed_ring_ratio":6.0,"ratio_tolerance":0.000001, - "meshes":[ - {"id":"sun_p0","type":"external","a":"sun_gear","b":"planet_0","backlash_mm":0.02},{"id":"sun_p1","type":"external","a":"sun_gear","b":"planet_1","backlash_mm":0.02},{"id":"sun_p2","type":"external","a":"sun_gear","b":"planet_2","backlash_mm":0.02}, - {"id":"ring_p0","type":"internal","a":"ring_gear","b":"planet_0","backlash_mm":0.02},{"id":"ring_p1","type":"internal","a":"ring_gear","b":"planet_1","backlash_mm":0.02},{"id":"ring_p2","type":"internal","a":"ring_gear","b":"planet_2","backlash_mm":0.02} - ] - }, - "public_connectors": [ - {"id":"housing_mount","source":{"instance_id":"main_case","connector_id":"bottom"}}, - {"id":"input_axis","source":{"instance_id":"motor","connector_id":"output_axis"}}, - {"id":"output_axis","source":{"instance_id":"carrier_inner","connector_id":"axis"}} - ], - "interference_contract": { - "policy":"no_unlisted_positive_volume", - "volume_tolerance_mm3":0.000000001, - "motion_samples_degrees":[0.0,18.0,36.0,54.0,72.0], - "designed_interference_fits":[ - { - "id":"case_ring_press_fit", - "a":"main_case", - "b":"ring_gear", - "type":"source_matched_press_fit", - "target_volume_mm3":0.8802681242104882, - "volume_tolerance_mm3":0.000001, - "evidence":"teacher parts at independently verified teacher assembly pose" - } - ] - }, - "verification": {"default_geometry":"strict_brep","assembly":"connector_residuals_and_collision","motion":"willis_residual_and_interference_sweep","parameter_sweeps":5}, - "runtime_policy": {"teacher_geometry_allowed":false,"absolute_matrix_replay_allowed":false,"source_cad_required":false,"checksum_locked_cots_step_allowed":true} -} diff --git a/json范例/planetary_joint.sop.v2.schema.json b/json范例/planetary_joint.sop.v2.schema.json deleted file mode 100644 index 18b02d1..0000000 --- a/json范例/planetary_joint.sop.v2.schema.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://simplecad.local/schemas/planetary-joint-sop-v2.schema.json", - "title": "SimpleCAD planetary-joint executable SOP V2", - "type": "object", - "additionalProperties": false, - "required": [ - "schema", "design_id", "units", "axis_convention", "assembly_layout", "definitions", - "instances", "expected_definition_counts", "assembly_root_instance_id", "assembly_relations", - "transmission", "public_connectors", "interference_contract", "verification", "runtime_policy" - ], - "properties": { - "schema": {"const": "simplecad.std.planetary_joint.sop.v2"}, - "design_id": {"type": "string", "minLength": 1}, - "units": {"const": "millimetre_degree"}, - "axis_convention": { - "type": "object", "additionalProperties": false, - "required": ["main_axis", "radial_plane", "right_handed"], - "properties": { - "main_axis": {"enum": ["x", "y", "z"]}, - "radial_plane": {"enum": ["xy", "yz", "zx"]}, - "right_handed": {"const": true} - } - }, - "assembly_layout": { - "type": "object", "additionalProperties": false, - "required": ["method", "calibration_role", "rules"], - "properties": { - "method": {"const": "semantic_axial_orbit"}, - "calibration_role": {"const": "offline_dimensions_only"}, - "rules": { - "type": "array", "minItems": 16, - "items": {"$ref": "#/$defs/layout_rule"} - } - } - }, - "definitions": { - "type": "array", "minItems": 16, "maxItems": 16, - "items": {"$ref": "#/$defs/definition"} - }, - "instances": { - "type": "array", "minItems": 22, "maxItems": 22, - "items": {"$ref": "#/$defs/instance"} - }, - "expected_definition_counts": { - "type": "array", "minItems": 16, "maxItems": 16, - "items": { - "type": "object", "additionalProperties": false, - "required": ["definition_id", "count"], - "properties": { - "definition_id": {"type": "string", "minLength": 1}, - "count": {"type": "integer", "minimum": 1} - } - } - }, - "assembly_root_instance_id": {"type": "string", "minLength": 1}, - "assembly_relations": { - "type": "array", "minItems": 1, - "items": {"$ref": "#/$defs/relation"} - }, - "transmission": {"$ref": "#/$defs/transmission"}, - "public_connectors": { - "type": "array", "minItems": 3, "maxItems": 3, - "items": { - "type": "object", "additionalProperties": false, - "required": ["id", "source"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "source": {"$ref": "#/$defs/endpoint"} - } - } - }, - "interference_contract": { - "type": "object", "additionalProperties": false, - "required": ["policy", "volume_tolerance_mm3", "motion_samples_degrees", "designed_interference_fits"], - "properties": { - "policy": {"const": "no_unlisted_positive_volume"}, - "volume_tolerance_mm3": {"type": "number", "minimum": 0}, - "motion_samples_degrees": { - "type": "array", "minItems": 2, "uniqueItems": true, - "items": {"type": "number"} - }, - "designed_interference_fits": { - "type": "array", "items": {"$ref": "#/$defs/interference_fit"} - } - } - }, - "verification": { - "type": "object", "additionalProperties": false, - "required": ["default_geometry", "assembly", "motion", "parameter_sweeps"], - "properties": { - "default_geometry": {"enum": ["strict_brep", "numeric_per_solid", "interface_only"]}, - "assembly": {"const": "connector_residuals_and_collision"}, - "motion": {"const": "willis_residual_and_interference_sweep"}, - "parameter_sweeps": {"type": "integer", "minimum": 2} - } - }, - "runtime_policy": { - "type": "object", "additionalProperties": false, - "required": ["teacher_geometry_allowed", "absolute_matrix_replay_allowed", "source_cad_required", "checksum_locked_cots_step_allowed"], - "properties": { - "teacher_geometry_allowed": {"const": false}, - "absolute_matrix_replay_allowed": {"const": false}, - "source_cad_required": {"const": false}, - "checksum_locked_cots_step_allowed": {"const": true} - } - } - }, - "$defs": { - "layout_rule": { - "type": "object", "additionalProperties": false, - "required": ["selector", "mode"], - "properties": { - "selector": {"type": "string", "pattern": "^(instance|definition):[^:]+$"}, - "mode": {"enum": ["root", "coaxial", "orbit"]}, - "axial_mm": {"type": "number"}, - "radial_mm": {"type": "number", "minimum": 0}, - "radial_angle_degrees": {"type": "number"}, - "orbit_phase_degrees": {"type": "number"}, - "local_axis": {"enum": ["x", "y", "z"]}, - "axis_direction": {"enum": [-1, 1]}, - "clock_degrees": {"type": "number"}, - "clock_step_degrees": {"type": "number"} - }, - "allOf": [ - { - "if": {"properties": {"mode": {"const": "root"}}}, - "then": {"required": ["selector", "mode"]}, - "else": {"required": ["axial_mm", "local_axis", "axis_direction", "clock_degrees"]} - }, - { - "if": {"properties": {"mode": {"const": "orbit"}}}, - "then": {"required": ["orbit_phase_degrees", "clock_step_degrees"]} - } - ] - }, - "connector": { - "type": "object", "additionalProperties": false, - "required": ["id", "kind"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "kind": {"enum": ["frame", "revolute_axis", "mount", "gear_axis", "bearing_seat", "shaft_hub"]} - } - }, - "definition": { - "type": "object", "additionalProperties": false, - "required": ["id", "family", "generator", "source_mode", "maturity", "connectors"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "family": {"type": "string", "minLength": 1}, - "generator": {"type": "string", "pattern": "^simplecadapi\\.std\\."}, - "source_mode": {"enum": ["formula_std", "cots_step"]}, - "maturity": {"enum": ["formula_verified", "formula_provisional", "cots_step_verified"]}, - "cots_asset": {"$ref": "#/$defs/cots_asset"}, - "connectors": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/connector"}} - }, - "allOf": [ - { - "if": {"properties": {"source_mode": {"const": "cots_step"}}}, - "then": {"required": ["cots_asset"], "properties": {"maturity": {"const": "cots_step_verified"}}}, - "else": {"not": {"required": ["cots_asset"]}} - } - ] - }, - "cots_asset": { - "type": "object", "additionalProperties": false, - "required": ["path", "sha256", "solid_count", "geometry_editability"], - "properties": { - "path": {"type": "string", "pattern": "^[^/].*\\.step$"}, - "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}, - "solid_count": {"type": "integer", "minimum": 1}, - "geometry_editability": {"const": "immutable"} - } - }, - "instance": { - "type": "object", "additionalProperties": false, - "required": ["id", "definition_id"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "definition_id": {"type": "string", "minLength": 1}, - "pattern_index": {"type": "integer", "minimum": 0} - } - }, - "endpoint": { - "type": "object", "additionalProperties": false, - "required": ["instance_id", "connector_id"], - "properties": { - "instance_id": {"type": "string", "minLength": 1}, - "connector_id": {"type": "string", "minLength": 1} - } - }, - "relation": { - "type": "object", "additionalProperties": false, - "required": ["id", "type", "a", "b"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "type": {"enum": ["fixed", "revolute", "bearing_support", "shaft_hub", "coaxial"]}, - "a": {"$ref": "#/$defs/endpoint"}, - "b": {"$ref": "#/$defs/endpoint"}, - "motion_role": {"enum": ["input", "output", "planet_spin", "free"]}, - "phase_offset_degrees": {"type": "number"} - } - }, - "interference_fit": { - "type": "object", "additionalProperties": false, - "required": ["id", "a", "b", "type", "target_volume_mm3", "volume_tolerance_mm3", "evidence"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "a": {"type": "string", "minLength": 1}, - "b": {"type": "string", "minLength": 1}, - "type": {"const": "source_matched_press_fit"}, - "target_volume_mm3": {"type": "number", "exclusiveMinimum": 0}, - "volume_tolerance_mm3": {"type": "number", "minimum": 0}, - "evidence": {"type": "string", "minLength": 1} - } - }, - "mesh": { - "type": "object", "additionalProperties": false, - "required": ["id", "type", "a", "b", "backlash_mm"], - "properties": { - "id": {"type": "string", "minLength": 1}, - "type": {"enum": ["external", "internal"]}, - "a": {"type": "string", "minLength": 1}, - "b": {"type": "string", "minLength": 1}, - "backlash_mm": {"type": "number", "minimum": 0} - } - }, - "transmission": { - "type": "object", "additionalProperties": false, - "required": ["type", "module_mm", "pressure_angle_deg", "teeth", "planet_count", "center_radius_mm", "center_tolerance_mm", "fixed_member", "input_member", "output_member", "fixed_ring_ratio", "ratio_tolerance", "meshes"], - "properties": { - "type": {"const": "simple_planetary"}, - "module_mm": {"type": "number", "exclusiveMinimum": 0}, - "pressure_angle_deg": {"type": "number", "exclusiveMinimum": 0, "exclusiveMaximum": 90}, - "teeth": { - "type": "object", "additionalProperties": false, - "required": ["sun", "planet", "ring"], - "properties": { - "sun": {"type": "integer", "minimum": 6}, - "planet": {"type": "integer", "minimum": 6}, - "ring": {"type": "integer", "minimum": 12} - } - }, - "planet_count": {"type": "integer", "minimum": 2}, - "center_radius_mm": {"type": "number", "exclusiveMinimum": 0}, - "center_tolerance_mm": {"type": "number", "minimum": 0}, - "fixed_member": {"const": "ring_gear"}, - "input_member": {"const": "sun_gear"}, - "output_member": {"const": "carrier"}, - "fixed_ring_ratio": {"type": "number", "exclusiveMinimum": 1}, - "ratio_tolerance": {"type": "number", "minimum": 0}, - "meshes": {"type": "array", "minItems": 6, "maxItems": 6, "items": {"$ref": "#/$defs/mesh"}} - } - } - } -}