from solid.solidpython import * from solid.utils import * from . import parameters gap = 0.5 # dissociate parts (do not add it in other calculations) def motherboard_holes(datum=parameters.motherboard_datum): return [ datum, [datum[0] + 45.72, datum[1]], [datum[0] + 203.2, datum[1] - 22.86], [datum[0] - 20.32, datum[1] - 154.94], [datum[0] + 45.72, datum[1] - 154.94], [datum[0] + 203.2, datum[1] - 154.94], [datum[0] + 45.72, datum[1] - 204.47], ] def motherboard_hole_objects(datum=parameters.motherboard_datum): height = parameters.motherboard_size[2] + 2*gap return union()([ translate([h[0], h[1], -gap])(cylinder(h=height, r=3.96/2)) for h in motherboard_holes(datum) ]) def motherboard(): hole_objects = motherboard_hole_objects() size = parameters.motherboard_size board = cube(size) cooler = translate([100, size[1] - 120 - 30, size[2]])( cube([120, 120, 65]) ) ramblock = translate([87, 30, size[2]])(cube([145, 35, 30])) objects = board - hole_objects + cooler + ramblock return color(parameters.colors.motherboard)(render()(objects)) def motherboard_support(): plan_size = parameters.motherboard_support_size support = cube(plan_size) hmount = parameters.motherboard_support_mount_height support_mounts = union()([ translate([h[0], h[1], plan_size[2]])( difference()( cylinder(h=hmount, r=2.5), down(gap)(cylinder(h=hmount + 1, r=1.5)), ) ) for h in motherboard_holes() ]) support_mounts = right(parameters.powersupply_size[2] + 5)(support_mounts) support_mounts = forward(plan_size[1] - parameters.motherboard_size[1])( support_mounts ) support = support + support_mounts return color(parameters.colors.metal)(render()(support)) def motherboard_assembly(): hup = parameters.motherboard_support_mount_height \ + parameters.motherboard_support_size[2] support = motherboard_support() mb = right(parameters.powersupply_size[2] + 5)(motherboard()) mb = forward(parameters.motherboard_support_size[1] - parameters.motherboard_size[1])(mb) motherboard_assembly = support + up(hup)(mb) return motherboard_assembly def wood_rear_plate(): thick = parameters.wood_thickness size = parameters.external_size connector_size = parameters.connector_panel_size rear_plate = cube([size[0] - 2*thick, thick, size[2]]) tpsu = [gap, -gap, thick + gap + parameters.powersupply_offset_up] psu_hole = translate(tpsu)( cube([parameters.powersupply_size[2], thick + 2*gap, parameters.powersupply_size[0]]) ) vent_r = 10 tvent = [size[0] - 2*thick - vent_r - 25, thick + gap, connector_size[2] + thick + vent_r + 20] vent_hole = translate(tvent)( rotate([90, 0, 0])( #cylinder(r=vent_r, h=thick+2*gap) cube([1, vent_r*2, thick+2*gap]) \ + left( 3)(cube([1, vent_r*2, thick+2*gap])) \ + left( 6)(cube([1, vent_r*2, thick+2*gap])) \ + left( 9)(cube([1, vent_r*2, thick+2*gap])) \ + left(12)(cube([1, vent_r*2, thick+2*gap])) \ + left(15)(cube([1, vent_r*2, thick+2*gap])) \ + left(18)(cube([1, vent_r*2, thick+2*gap])) \ + left(21)(cube([1, vent_r*2, thick+2*gap])) \ + left(24)(cube([1, vent_r*2, thick+2*gap])) #cylinder(r=vent_r, h=thick+2*gap) ) ) # TODO: fix x shift tconnector = [size[0] - 2*thick - 10 - connector_size[0], -gap, thick] connector_hole = translate(tconnector)( cube([connector_size[0], thick + 2*gap, connector_size[2]]) ) card_size = [10, thick + 2*gap, 100] tcard = tconnector[:] tcard[0] -= 7 + card_size[0] # TODO: fix dimensions card_hole = translate(tcard)( cube([card_size[0], thick + 2*gap, card_size[2]]) \ + left(card_size[0] + 2)(cube([card_size[0], thick + 2*gap, card_size[2]])) \ + left(2*card_size[0] + 4)(cube([card_size[0], thick + 2*gap, card_size[2]])) \ + left(3*card_size[0] + 6)(cube([card_size[0], thick + 2*gap, card_size[2]])) \ + left(4*card_size[0] + 8)(cube([card_size[0], thick + 2*gap, card_size[2]])) ) return rear_plate - psu_hole - vent_hole - connector_hole - card_hole #return card_hole def wood_front_plate(): thick = parameters.wood_thickness size = parameters.external_size objects = cube([size[0], size[2], thick]) radius = parameters.button_diameter/2 button = down(gap)(cylinder(r=radius, h=thick+2*gap)) button = forward(radius + thick + 10)(button) button = right(radius + 10 + thick)(button) objects -= button front_panel = down(gap)(cube([101, 25, thick+2*gap])) front_panel = right(size[0]/2 - 101/2)(front_panel) front_panel = forward(thick + 20)(front_panel) objects -= front_panel usb_ports = down(gap)(cube([100, 20, thick+2*gap])) usb_ports = right(size[0]/2 - 100/2)(usb_ports) usb_ports = forward(thick + 20 + 25 + 10)(usb_ports) objects -= usb_ports storage_size = parameters.storage_size[:] storage_size[1] += 10 sub_storage = cube(storage_size) sub_storage = right(size[0] - storage_size[0] - thick - 30)(sub_storage) sub_storage = forward(size[2] - storage_size[1] - 25)(sub_storage) sub_storage2 = cube(storage_size) sub_storage2 = right(thick + 30)(sub_storage2) sub_storage2 = forward(size[2] - storage_size[1] - 25)(sub_storage2) objects -= down(gap)(sub_storage + sub_storage2) return objects def powersupply(): size = parameters.powersupply_size psu = cube(size) psu -= translate([size[0]/2, size[1]/2, -gap])( cylinder(r=60, h=20) ) return color(parameters.colors.psu)(render()(psu)) def wood_case(): thick = parameters.wood_thickness size = parameters.external_size bottom_plate = translate([thick + gap, thick + gap, 0])( cube([size[0] - 2*thick, size[1] - 2*thick, thick]) ) right_left_plate = cube([thick, size[1] - thick, size[2]]) right_plate = translate([size[0] - thick + 2*gap, thick + gap, 0])( right_left_plate ) left_plate = translate([0, thick + gap, 0])(right_left_plate) rear_plate = translate([thick + gap, size[1] - thick + 2*gap, 0])( wood_rear_plate() ) front_plate = forward(thick-gap)(rotate([90, 0, 0])(wood_front_plate())) all_plates = ( bottom_plate + right_plate + left_plate + rear_plate + front_plate ) return color(parameters.colors.wood)(render()(all_plates)) def main(): thick = parameters.wood_thickness d = wood_case() #d += translate([thick + gap + parameters.powersupply_size[2], # thick + gap, # thick + gap])( # translate([parameters.motherboard_support_size[0]/2, # parameters.motherboard_support_size[1]/2, # parameters.motherboard_support_size[2]/2])( # motherboard_assembly() # ) #) mb = translate([thick + gap, thick + gap, thick + gap])( motherboard_assembly() ) d += mb psu = translate([parameters.powersupply_size[2] + thick + gap, parameters.external_size[1] - thick - gap - parameters.powersupply_size[1], thick + gap + parameters.powersupply_offset_up])( rotate([0, -90, 0])(powersupply()) ) d += psu #d = motherboard() #d = wood_rear_plate() #d = wood_front_plate() #d = motherboard() #d = motherboard_assembly() #d = motherboard_support() scad_render_to_file(d, 'assembly.scad', include_orig_code=False)