from cadquery import exporters from cq_warehouse.extensions import Workplane from cq_warehouse.fastener import * from cq_warehouse.thread import * from cqmore.curve import archimedeanSpiral, circle from cqmore.polygon import regularPolygon, star from cqmore.polyhedron import polarZonohedra, Polyhedron, superellipsoid from svg_path import addSvgPath from svgpathtools import svg2paths import cadquery as cq import cqmore from cq_gears import ( SpurGear, Worm, HerringboneGear, RackGear, HerringboneRackGear, BevelGear, BevelGearPair, ) headphone_diameter = 6.0 headphone_radius = headphone_diameter / 2.0 usb_width = 15 usb_height = 6.8 cut_offset = 5.0 player_height = 14 + cut_offset player_length = 57.8 player_width = 62 + cut_offset headphone_dist_from_side = 12.2 usb_dist_from_side = 22 Workplane = cqmore.extend(Workplane) Workplane.addSvgPath = addSvgPath result = Workplane() result = result.box(player_length, player_width, player_height) result = result.workplane(offset=5).box( player_length - cut_offset, player_width - cut_offset, player_height + cut_offset, combine="cut", ) result = ( result.workplane(offset=3) .move(2.5, 0) .box( player_length, player_width - cut_offset, player_height - cut_offset, combine="cut", ) ) headphone_hole = ( Workplane("XZ") .workplane(offset=30) .move((player_width / 2) - cut_offset - headphone_dist_from_side - 2.2, 1.2) .cylinder(10, headphone_radius) ) usb_hole = ( Workplane("XZ") .workplane(offset=30) .move((player_width / 2) - cut_offset - usb_dist_from_side - 4, 0.5) .box(usb_width, usb_height, 10) ) result = result.cut(headphone_hole) result = result.cut(usb_hole) top_back_text = ( Workplane("YX").workplane(offset=9).center(0, 5).text("If you find this", 3, 4) ) back_text = ( Workplane("YX").workplane(offset=9).text("Email wes@wesk.tech for a reward", 3, 4) ) result = result.cut(top_back_text) result = result.cut(back_text) cq.exporters.export(result, "/home/deck/model_files/music_player_case.step") try: show_object(result) except NameError: pass