use <./common/common.scad>;

$fn = 80;

module square_spindle_reference () {
    SQUARE = 7.95;
    translate([0, 0, 12.3 - 1]) {
        difference() {
            union() {
                translate([0, 0, -(12.3 / 2)]) cube([SQUARE, SQUARE, 12.3], center = true);
                rotate([0, 90, 0]) cylinder(r = SQUARE / 2, h =8, center = true);
                rotate([0, 90, 90]) cylinder(r = SQUARE / 2, h =8, center = true);
            }
            for (i = [0 : 4]) {
                rotate([0, 0, i * 90]) translate([0, 4.9, 1]) rotate([12, 0, 0]) cube([SQUARE, 2, 10], center = true);
            }
        }
        
    }
    translate([0, 0, (39 / 2)]) cylinder(r = 6.57 / 2, h = 39, center = true, $fn = 60);    
}


module square_spindle_reference_alternate () {
	$fn = 60;
	difference(){
		translate([0, 0, -1.5]) cube([7.5, 7.5, 21.5], center = true);
		for (i = [0:4]) {
			rotate([0, 0, (i * 90)]){
				translate([(7.5 / 2) + .4, (7.5 / 2) + .4, 18.5 / 2]) rotate([0, -15, 45]) cube([2.5, 7.5, 7.5], center = true);
			}
		}		
	}
	difference () {
		union() {
			translate([0, 0, (18.5 / 2) + (3.5 / 2)]) cylinder(r = R(7.5), h = 3.5, center = true);
			translate([0, 0, (18.5 / 2) + (7.5 / 2)]) sphere(r =(7.5));
		}
		translate ([0, 0, (18.5 / 2) + 7.5]) cube([10, 10, 2], center = true);
	}

	translate([0, 0, -(18.5/ 2) - (3 / 2) - 3]) cylinder(r = R(16), h = 3, center = true);
}

module super8_void (Height = 50) {
	fin_w = 2;
	center_d = 13.5;
	fin_l = (center_d / 2) + 4;
	for (i = [0:2]) {
		rotate([0, 0, (i * (360/3))]){
			translate([0, fin_l/2, 0]) cube([fin_w, fin_l, Height], center = true);
		}
	}
	cylinder(r = R(center_d), h = Height, center = true);
}

module 16mm_square_spindle_void (Height = 21.5) {
	cube([8.3, 8.3, Height], center = true);
}

module 16mm_core_adapter_body () {
    $fn = 100;
	difference () {
		union () {
			cylinder(r1 = 13.2, r2 = 12.8, h = 16.6, center = true);
			translate([0, 0, -8.8]) cylinder(r = 15, h = 1, center = true);
			translate([14.5, 0, -.5]) cube([3.6, 3.6, 17.6], center = true);
		}
		children();
	}
}

module 16mm_core_adapter () {
	16mm_core_adapter_body() 16mm_square_spindle_void();
}

module super8_to_16mm_core_adapter () {
	16mm_core_adapter_body() super8_void();
}

module 16mm_to_super8_reel_adapter () {
    BOTTOM_D = 21.53;
    BOTTOM_H = 1.5;
    D = 12.72;
    H = 10;
    SQUARE = 8.2;
    TAPER = 1.4;
    PEG_H = 9;
    PEG_L = 3.18;
    PEG_W = 2;
    
    $fn = 200;
    
    difference () {
        union () {
            cylinder(r = R(BOTTOM_D), h = BOTTOM_H, center = true);
            translate([0, 0, (BOTTOM_H / 2) + H / 2]) cylinder(r = R(D), h = H, center = true);
            translate([0, 0, (BOTTOM_H / 2) + H + (TAPER / 2)]) cylinder(r1 = R(D), r2 = R(D) - TAPER, h = TAPER, center = true);
        }
        rotate([0, 0, 45]) cube([SQUARE, SQUARE, 60], center = true);
        translate([0, 10, 0]) cube([3, 20, 60], center = true);
    }
    for (i = [1 : 2]) {
        rotate([0, 0, i * 120]) translate([0, (D / 2) + (PEG_L / 2) - (PEG_W / 2), (BOTTOM_H / 2) + (PEG_H / 2)]) cube([PEG_W, PEG_L, PEG_H], center = true);
        rotate([0, 0, i * 120]) translate([0, (D / 2) + (PEG_L / 2) + (PEG_W / 3), (BOTTOM_H / 2) + (PEG_H / 2)]) cylinder(r = R(PEG_W), h = PEG_H, center = true, $fn = 40);
    }
}

PART = "16mm_core";

if (PART == "16mm_core") {
	16mm_core_adapter();
} else if (PART == "super8_to_16mm_core") {
	super8_to_16mm_core_adapter();
} else if (PART == "16mm_to_super8_reel") {
	16mm_to_super8_reel_adapter();
} else {
	//square_spindle_reference_alternate();
}