# /// script # requires-python = ">=3.14" # dependencies = ["ocp_vscode", "build123d"] # /// from build123d import * from ocp_vscode import * ### Dimensions ### bolt_spacing = 17 * MM bolt_hole_diameter = 4 * MM z_rod_diameter = 10 * MM buffer = 4 * MM bolt_to_PTFE_offset = 2 * MM base_length = 30 * MM bolt_to_holder_offset = 20 * MM wall_thickness = 2 * MM PTFE_radius = 2.5 * MM holder_length = 14 * MM ################### with BuildPart() as guide: with BuildSketch() as sketch: Rectangle( 2 * buffer + base_length, 2 * buffer + bolt_spacing + bolt_hole_diameter, align=(Align.MIN, Align.MIN), ) with Locations( (buffer + bolt_hole_diameter / 2.0, buffer + bolt_hole_diameter / 2.0), ( buffer + bolt_hole_diameter / 2.0, buffer + bolt_hole_diameter / 2.0 + bolt_spacing, ), ): Circle(radius=bolt_hole_diameter / 2.0, mode=Mode.SUBTRACT) with Locations( ( buffer + bolt_hole_diameter / 2.0, buffer + bolt_spacing / 2.0 + bolt_hole_diameter / 2.0, ), ): Circle(radius=z_rod_diameter / 2.0, mode=Mode.SUBTRACT) Rectangle( z_rod_diameter / 2.0 + buffer, z_rod_diameter, mode=Mode.SUBTRACT, align=(Align.MAX, Align.CENTER), ) extrude(amount=wall_thickness) with BuildSketch(Plane.YZ.offset(buffer + bolt_to_holder_offset)) as sketch: with Locations( ( buffer + bolt_hole_diameter / 2.0 + bolt_to_PTFE_offset, PTFE_radius + wall_thickness, ), ): Circle( radius=PTFE_radius + wall_thickness, align=(Align.CENTER, Align.CENTER) ) Circle( radius=PTFE_radius, align=(Align.CENTER, Align.CENTER), mode=Mode.SUBTRACT, ) extrude(amount=holder_length) show(guide) export_stl(guide.part, "guide.stl")