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 math import ceil, floor side_width = 5 bottom_width = 5 middle_width = 2 panel_width = 1.2 amp_bottom_height = 19 + bottom_width + middle_width # how tall the pcb is battery_width = 26 battery_height = 17 amp_width = 62 amp_length = 60 amp_height = battery_height + amp_bottom_height panel_component_diameter = 7.8 panel_distance = 10.5 + ( panel_component_diameter / 2 ) # distance between each panel component panel_dist_from_side = 2 panel_dist_from_bottom = 0 # how far the panel components are from the bottom result = Workplane().box(amp_length, amp_width, middle_width) result = ( result.workplane(offset=0) .center(0, -(amp_width / 2)) .line(0, amp_width, forConstruction=True) .vertices() .box(amp_length, side_width, amp_height) ) result = ( result.workplane(offset=amp_height / 2) .center(0, amp_width / 2) .box(amp_length, amp_width + bottom_width, bottom_width) ) result = ( result.workplane(offset=-7.8) .center((amp_width / 2) - (panel_width / 2) - 1, 0) .box(panel_width, amp_width, amp_height) ) panel_holes = ( Workplane("ZY") .workplane(offset=-(amp_length / 2)) .center(panel_component_diameter + panel_dist_from_bottom, 0) .line(0, panel_distance, forConstruction=True) .vertices() .cylinder(side_width, panel_component_diameter / 2) ) panel_holes_2 = ( Workplane("ZY") .workplane(offset=-(amp_length / 2)) .center(panel_component_diameter + panel_dist_from_bottom, 0) .line(0, -(panel_distance), forConstruction=True) .vertices() .cylinder(side_width, panel_component_diameter / 2) ) result = result.cut(panel_holes) result = result.cut(panel_holes_2) cq.exporters.export(result, "/home/deck/model_files/amp_case.step") try: show_object(result) except NameError: pass