include ; use ; use ; module dispenser_mount() { difference() { color("green") cube([disp_mount_width, disp_mount_len, disp_mount_wall]); translate([-disp_mount_off_x, disp_mount_off_y, 0]) { translate([0, 0, -1]) cylinder(d = dispenser_top_dia, h = disp_mount_wall + 2, $fn = 100); translate([0, 0, disp_mount_wall - dispenser_rim_height]) cylinder(d = dispenser_rim_dia, h = dispenser_rim_height + 1, $fn = 100); } } } disp_rail_len = 2 * (disp_mount_width + disp_mount_off_x); disp_mount_height = dispenser_height - disp_mount_wall + dispenser_rim_height; module dispenser_assembly() { %color("magenta") dispenser(); translate([0, 0, disp_mount_height + 130]) extruder(); for (i = [-1, 1]) scale([i, 1, 1]) translate([disp_mount_off_x, -disp_mount_off_y, disp_mount_height]) dispenser_mount(); translate([-disp_rail_len / 2, dispenser_mount_rail_off, disp_mount_height]) rail_2020_x(disp_rail_len, "dispenser mount base rail"); for (i = [-1, 1]) translate([i * disp_rail_len / 2 - ((i + 1) / 2) * 20, -disp_mount_off_y, disp_mount_height - 20]) rail_2020_y(disp_mount_len + 20, "dispenser mount arm rail"); } dispenser_assembly();