--- /dev/null
+infty = 200;
+eps = 0.01;
+
+wall = 1;
+
+led_d = 10 + 0.5;
+int_d = 19/cos(30);
+barrier_h = 8;
+body_l = 70 + barrier_h;
+
+difference() {
+ cylinder(r = int_d/2 + wall/cos(30), $fn = 6, h = body_l);
+ translate([0, 0, wall])
+ cylinder(r = int_d/2, $fn = 6, h = body_l);
+ // hole for LED
+ translate([0, 0, -eps])
+ cylinder(r = led_d/2, h = infty);
+}
+
+// battery front end stop
+translate([0, 0, barrier_h-wall])
+intersection() {
+ cylinder(r = int_d/2 + wall/(2*cos(30)), $fn = 6, h = wall);
+ for (angle = [0:360/3:360]) rotate ([0, 0, angle])
+ translate([led_d/2+wall, -infty/2, -eps])
+ cube(infty);
+}
+
+// rear end clip
+clip_l = 2;
+clip_w = 0.8;
+clip_dist = 3;
+
+for (angle = [0:60:360]) rotate([0, 0, angle])
+translate([-clip_l/2, int_d*cos(30)/2+wall, body_l - clip_dist]) {
+ scale([1, 1, 3])
+ rotate([0, 90, 0])
+ cylinder(r = clip_w, h = clip_l, $fn = 4);
+}
+
+// lid
+
+lid_d = int_d + 2*wall/cos(30) + 2*clip_w/cos(30);
+lid_h = clip_dist + 3*wall+3*clip_w;
+
+translate([0, int_d + 5, 0])
+difference() {
+ cylinder(r = lid_d/2 + wall/cos(30), $fn = 6, h = lid_h);
+ difference() {
+ translate([0, 0, wall])
+ cylinder(r = lid_d/2, $fn = 6, h = lid_h);
+ for (angle = [0:180:360]) rotate([0, 0, angle])
+ translate([-clip_l/2, lid_d*cos(30)/2, clip_dist + 2*wall]) {
+ scale([1, 1, 3])
+ rotate([0, 90, 0])
+ cylinder(r = clip_w, h = clip_l, $fn = 4);
+ }
+ }
+}