//deg is the amount in degrees the hinge should be able to pivot, len_before the length of the section before the hinge, len_after the length of the section after the hinge module hinge(deg, len_before = 0, len_after = 0){ cut_points = [[6,0,5.5], [6,7,5.5], [4.5,0,7], [4.5,7,7], [6,0,7], [6,7,7]]; cut_faces = [[0,2,4], [1,5,3], [0,1,3,2], [0,4,5,1], [2,3,5,4]]; union(){ difference(){ cube([6,7,6], center = false); polyhedron(points = cut_points, faces = cut_faces, convexity = 10); translate([3,3.5,3.5]){ rotate(90, [1,0,0]) cylinder(h = 6, r = 2, center = true, $fn = 16); } if(deg <= 45){ translate([3,2,4.75]){ rotate(-deg,[0,1,0]){ translate([0,0,-4]){ cube([4,3,4], center = false); } } } } else{ translate([1.75,2,3.5]){ rotate(-deg,[0,1,0]){ translate([0,0,-6]){ cube([6,3,6], center = false); } } } } translate([4,2,1.5]) cube([4,3,4], center = false); } cube([6.5,7,1.5], center = false); translate([3,3.5,3.5]){ rotate(90, [1,0,0]) cylinder(h = 4.5, r = 1.25, center = true, $fn = 16); } translate([3,2.5,2.25]) cube([4,2,2.5], center = false); translate([-len_before,0,0]) cube([len_before,7,6], center = false); translate([7,0,0]) cube([len_after,7,6], center = false); } }