dogears/scad/base/hinge.scad
2026-04-02 12:19:44 +02:00

54 lines
No EOL
1.6 KiB
OpenSCAD

//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);
}
}