{ "Schema": "mechanical_rule_template_package_v1", "PackageId": "tight_fit_sleeve_requires_disassembly_access", "Source": { "ImagePath": "built_in_sample", "TextPath": null, "ExtractionMode": "agent_authored_until_llm_adapter_is_connected", "Notes": [ "The teaching figure has four examples: a is a problem pattern; b/c/d are pass-evidence patterns.", "Hatch lines and printed scale are annotations and must not become contour evidence." ] }, "ExtractionContract": { "LlmResponsibility": "Extract rule semantics and image-side 2D structure templates from teaching image/text; do not judge product models.", "ProgramResponsibility": "Extract model B-rep evidence, generate model-side 2D section structures, match templates, and make final rule decisions.", "RequiredLlmOutputs": [ "rule object and trigger condition", "problem type and problem evidence", "pass evidence types", "image 2D structure templates", "visual anchors such as m/h/t", "ignored visual annotations such as hatches and scale" ], "RequiredProgramEvidence": [ "components and inferred categories", "faces, cylinders, planes, axes, and contact-like relations", "scene candidates", "section 2D structure instances", "real dimensions and contact validation evidence" ] }, "BrepFactCapabilities": [ { "Fact": "sleeve_component", "SourceLayer": "3d_brep+component", "ExtractorStatus": "implemented", "Extractor": "SceneRecognizer.RecognizeSleeveInHole", "RequiredPrimitive": "component category/name plus cylindrical section/contact evidence", "MissingWhenAbsent": "No sleeve-like component candidate was recognized.", "AuthoringAllowed": true }, { "Fact": "sleeve_like_component", "SourceLayer": "3d_brep+component", "ExtractorStatus": "implemented", "Extractor": "SceneRecognizer.RecognizeSleeveInHole", "RequiredPrimitive": "component category/name plus cylindrical section/contact evidence", "MissingWhenAbsent": "No sleeve-like component candidate was recognized.", "AuthoringAllowed": true }, { "Fact": "host_hole_component", "SourceLayer": "3d_brep+component", "ExtractorStatus": "implemented", "Extractor": "SceneRecognizer.RecognizeSleeveInHole", "RequiredPrimitive": "host/housing component and coaxial/contact evidence", "MissingWhenAbsent": "No host or hole component candidate was recognized.", "AuthoringAllowed": true }, { "Fact": "coaxial_cylinder_pair", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "SectionStructureSynthesizer/SketchGraph.Relations", "RequiredPrimitive": "coaxial sleeve/host section geometry", "MissingWhenAbsent": "No coaxial sleeve-host pair was detected.", "AuthoringAllowed": true }, { "Fact": "axial_overlap", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "SectionStructureSynthesizer/SketchGraph.Relations", "RequiredPrimitive": "overlapping axial ranges in section", "MissingWhenAbsent": "No axial overlap between sleeve and host was detected.", "AuthoringAllowed": true }, { "Fact": "close_fit_contact", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "SketchGraph.Relations contact", "RequiredPrimitive": "contact or near-contact section edges", "MissingWhenAbsent": "No close-fit contact relation was detected.", "AuthoringAllowed": true }, { "Fact": "close_fit_contact_or_small_clearance", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "SketchGraph.Relations contact/clearance", "RequiredPrimitive": "contact or small clearance section edges", "MissingWhenAbsent": "No close-fit contact or small clearance relation was detected.", "AuthoringAllowed": true }, { "Fact": "outside_accessible_push_path", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "ReadSketchDimension exposed_push_face_candidate", "RequiredPrimitive": "exposed sleeve end edge and outside clearance", "MissingWhenAbsent": "No exposed sleeve push face was detected.", "AuthoringAllowed": true }, { "Fact": "push_path_reaches_sleeve_push_area", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "ReadSketchDimension exposed_push_face_candidate", "RequiredPrimitive": "exposed sleeve end edge", "MissingWhenAbsent": "No push path reaches a sleeve push area.", "AuthoringAllowed": true }, { "Fact": "push_direction_has_removal_component", "SourceLayer": "2d_section_brep", "ExtractorStatus": "implemented", "Extractor": "ReadSketchDimension exposed_push_face_candidate", "RequiredPrimitive": "push face orientation against sleeve axis", "MissingWhenAbsent": "No push direction with removal-axis component was detected.", "AuthoringAllowed": true }, { "Fact": "outside_connected_void_gap", "SourceLayer": "2d_section_brep", "ExtractorStatus": "partial", "Extractor": "GapFeatureSynthesizer.SectionFloodFill", "RequiredPrimitive": "outside-connected free-space cells between sleeve and host", "MissingWhenAbsent": "No outside-connected sleeve/host gap candidate was detected.", "AuthoringAllowed": true }, { "Fact": "gap_path_reaches_sleeve_push_area", "SourceLayer": "2d_section_brep", "ExtractorStatus": "partial", "Extractor": "GapFeatureSynthesizer.SectionFloodFill", "RequiredPrimitive": "gap cluster adjacent to sleeve push area", "MissingWhenAbsent": "No detected gap cluster reached the sleeve push area.", "AuthoringAllowed": true }, { "Fact": "gap_width_sufficient", "SourceLayer": "2d_section_brep", "ExtractorStatus": "partial", "Extractor": "GapFeatureSynthesizer.SectionFloodFill", "RequiredPrimitive": "estimated minimum sleeve-host free-space width", "MissingWhenAbsent": "No detected gap satisfied the minimum tool-width threshold.", "AuthoringAllowed": true }, { "Fact": "tool_force_direction_valid", "SourceLayer": "2d_section_brep", "ExtractorStatus": "partial", "Extractor": "GapFeatureSynthesizer.SectionFloodFill", "RequiredPrimitive": "gap cluster with axial extent along removal direction", "MissingWhenAbsent": "No detected gap had a sufficient removal-direction extent.", "AuthoringAllowed": true }, { "Fact": "outside_connected_cylindrical_port", "SourceLayer": "3d_brep", "ExtractorStatus": "partial", "Extractor": "PortFeatureSynthesizer.CylinderFaces", "RequiredPrimitive": "small host/end-cap cylindrical face treated as port candidate", "MissingWhenAbsent": "No small host/end-cap cylindrical port candidate was detected.", "AuthoringAllowed": true }, { "Fact": "port_axis_intersects_sleeve_push_area", "SourceLayer": "3d_brep", "ExtractorStatus": "partial", "Extractor": "PortFeatureSynthesizer.CylinderFaces", "RequiredPrimitive": "port axis close enough to sleeve push area", "MissingWhenAbsent": "No port axis was found to reach the sleeve push area.", "AuthoringAllowed": true }, { "Fact": "port_diameter_sufficient", "SourceLayer": "3d_brep", "ExtractorStatus": "partial", "Extractor": "PortFeatureSynthesizer.CylinderFaces", "RequiredPrimitive": "cylindrical port radius/diameter", "MissingWhenAbsent": "No detected port diameter satisfied the minimum threshold.", "AuthoringAllowed": true }, { "Fact": "port_push_direction_valid", "SourceLayer": "3d_brep", "ExtractorStatus": "partial", "Extractor": "PortFeatureSynthesizer.CylinderFaces", "RequiredPrimitive": "port axis with removal-axis force component", "MissingWhenAbsent": "No detected port axis had a sufficient removal-direction component.", "AuthoringAllowed": true }, { "Fact": "thread_or_screw_feature", "SourceLayer": "feature_metadata_or_modeled_thread", "ExtractorStatus": "optional_only", "Extractor": "optional SolidWorks feature/thread metadata or modeled helical B-rep", "RequiredPrimitive": "thread feature metadata or real thread geometry", "MissingWhenAbsent": "Pure B-rep often does not contain reliable thread semantics; keep this optional.", "AuthoringAllowed": false } ], "SemanticRules": [ { "RuleId": "tight_fit_sleeve_requires_disassembly_access", "Title": "与孔配合紧密的套筒应考虑拆卸结构", "TriggerCondition": { "SceneType": "sleeve_in_hole", "TargetObject": "sleeve", "HostObject": "hole_or_housing", "Relation": "tight_fit_or_contact_like", "RequiredEvidence": [ "sleeve_component", "host_hole_component", "coaxial_cylinder_pair", "axial_overlap", "close_fit_contact" ] }, "Problem": { "ProblemType": "missing_disassembly_access", "Message": "与孔配合紧密的套筒缺少可用拆卸结构,拆卸时可能难以放入工具或施力。", "SourceExample": "a" }, "PassEvidenceTypes": [ { "EvidenceType": "external_push_access", "SourceExample": "b", "Anchor": "m", "Required2DTemplateId": "b_external_push_access", "RequiredModelEvidence": [ "outside_accessible_push_path", "push_path_reaches_sleeve_push_area", "push_direction_has_removal_component" ], "OptionalModelEvidence": [] }, { "EvidenceType": "tool_insertion_gap", "SourceExample": "c", "Anchor": "h", "Required2DTemplateId": "c_tool_insertion_gap", "RequiredModelEvidence": [ "outside_connected_void_gap", "gap_path_reaches_sleeve_push_area", "gap_width_sufficient", "tool_force_direction_valid" ], "OptionalModelEvidence": [] }, { "EvidenceType": "ejector_screw_hole", "SourceExample": "d", "Anchor": "t", "Required2DTemplateId": "d_ejector_screw_hole", "RequiredModelEvidence": [ "outside_connected_cylindrical_port", "port_axis_intersects_sleeve_push_area", "port_diameter_sufficient", "port_push_direction_valid" ], "OptionalModelEvidence": [ "thread_or_screw_feature" ] } ], "DecisionLogic": { "IfTriggerMissing": "not_applicable", "IfTriggerUnknown": "needs_review", "IfTriggeredAndAnyPassEvidence": "pass", "IfTriggeredAndNoPassEvidence": "problem" } } ], "ImageStructureTemplates": [ { "TemplateId": "common_sleeve_in_hole_close_fit", "Role": "trigger", "SourceExample": "a_b_c_d_common", "Anchor": "", "Entities": [ { "Id": "sleeve_material", "Kind": "region", "SemanticRole": "sleeve" }, { "Id": "host_material", "Kind": "region", "SemanticRole": "housing_or_hole" }, { "Id": "sleeve_axis", "Kind": "axis", "SemanticRole": "main_axis" }, { "Id": "fit_contact", "Kind": "edge_pair", "SemanticRole": "coincident_or_close_fit_edges" } ], "RequiredRelations": [ { "Type": "coaxial", "A": "sleeve_material", "B": "host_material" }, { "Type": "contact", "A": "sleeve_material", "B": "host_material" }, { "Type": "axial_overlap", "A": "sleeve_material", "B": "host_material" } ], "IgnoredVisualElements": [ "hatch_lines", "line_thickness", "absolute_scale", "printed_dimension_size", "table_border", "text_border" ] }, { "TemplateId": "a_no_removal_access", "Role": "problem", "SourceExample": "a", "Anchor": "", "Entities": [ { "Id": "sleeve_material", "Kind": "region", "SemanticRole": "sleeve" }, { "Id": "host_material", "Kind": "region", "SemanticRole": "housing_or_hole" }, { "Id": "fit_contact", "Kind": "edge_pair", "SemanticRole": "contact" }, { "Id": "outside", "Kind": "region", "SemanticRole": "outside_air" } ], "RequiredRelations": [ { "Type": "contact", "A": "sleeve_material", "B": "host_material" }, { "Type": "blocks_axial_removal", "A": "host_material", "B": "sleeve_material" }, { "Type": "missing", "A": "external_push_access", "B": "sleeve_material" }, { "Type": "missing", "A": "tool_insertion_gap", "B": "sleeve_material" }, { "Type": "missing", "A": "ejector_screw_hole", "B": "sleeve_material" } ], "IgnoredVisualElements": [ "hatch_lines", "line_thickness", "absolute_scale", "printed_dimension_size", "table_border", "text_border" ] }, { "TemplateId": "b_external_push_access", "Role": "pass", "SourceExample": "b", "Anchor": "m", "Entities": [ { "Id": "outside", "Kind": "region", "SemanticRole": "outside_air" }, { "Id": "push_access_path", "Kind": "path", "SemanticRole": "outside_accessible_force_path" }, { "Id": "sleeve_push_area", "Kind": "edge_or_region", "SemanticRole": "sleeve_force_receiving_area" }, { "Id": "removal_axis", "Kind": "axis", "SemanticRole": "sleeve_removal_direction" } ], "RequiredRelations": [ { "Type": "connected_to_outside", "A": "push_access_path", "B": "outside" }, { "Type": "reaches", "A": "push_access_path", "B": "sleeve_push_area" }, { "Type": "direction_has_component", "A": "push_access_path", "B": "removal_axis" } ], "IgnoredVisualElements": [ "hatch_lines", "line_thickness", "absolute_scale", "printed_dimension_size", "table_border", "text_border" ] }, { "TemplateId": "c_tool_insertion_gap", "Role": "pass", "SourceExample": "c", "Anchor": "h", "Entities": [ { "Id": "sleeve_material", "Kind": "region", "SemanticRole": "sleeve" }, { "Id": "host_material", "Kind": "region", "SemanticRole": "housing_or_hole" }, { "Id": "gap_region", "Kind": "region", "SemanticRole": "void_gap" }, { "Id": "outside", "Kind": "region", "SemanticRole": "outside_air" }, { "Id": "sleeve_push_area", "Kind": "edge_or_region", "SemanticRole": "sleeve_force_receiving_area" }, { "Id": "removal_axis", "Kind": "axis", "SemanticRole": "sleeve_removal_direction" }, { "Id": "h", "Kind": "dimension", "SemanticRole": "minimum_tool_insertion_clearance" } ], "RequiredRelations": [ { "Type": "connected_to_outside", "A": "gap_region", "B": "outside" }, { "Type": "reaches", "A": "gap_region", "B": "sleeve_push_area" }, { "Type": "direction_has_component", "A": "gap_region", "B": "removal_axis" }, { "Type": "gap_width_sufficient", "A": "gap_region", "B": "h" } ], "IgnoredVisualElements": [ "hatch_lines", "line_thickness", "absolute_scale", "printed_dimension_size", "table_border", "text_border" ] }, { "TemplateId": "d_ejector_screw_hole", "Role": "pass", "SourceExample": "d", "Anchor": "t", "Entities": [ { "Id": "sleeve_material", "Kind": "region", "SemanticRole": "sleeve" }, { "Id": "host_material", "Kind": "region", "SemanticRole": "housing_or_hole" }, { "Id": "port_region", "Kind": "region", "SemanticRole": "cylindrical_ejector_port" }, { "Id": "outside", "Kind": "region", "SemanticRole": "outside_air" }, { "Id": "sleeve_push_area", "Kind": "edge_or_region", "SemanticRole": "sleeve_force_receiving_area" }, { "Id": "port_axis", "Kind": "axis", "SemanticRole": "ejector_screw_axis" }, { "Id": "removal_axis", "Kind": "axis", "SemanticRole": "sleeve_removal_direction" }, { "Id": "t", "Kind": "dimension", "SemanticRole": "ejector_screw_hole_size" } ], "RequiredRelations": [ { "Type": "connected_to_outside", "A": "port_region", "B": "outside" }, { "Type": "axis_intersects", "A": "port_axis", "B": "sleeve_push_area" }, { "Type": "direction_has_component", "A": "port_axis", "B": "removal_axis" }, { "Type": "port_diameter_sufficient", "A": "port_region", "B": "t" } ], "IgnoredVisualElements": [ "hatch_lines", "line_thickness", "absolute_scale", "printed_dimension_size", "table_border", "text_border" ] } ] }