lockpuzzle/lockpuzzle.scad

42 lines
No EOL
843 B
OpenSCAD

use <key_dial.scad>;
use <e_ring.scad>;
use <case.scad>;
use <plug.scad>;
module lock(alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ", password="CHAOS", diameter=50, tolerance=0.2, $fn= 60) {
n = len(password);
key_indices=search(password, alphabet);
for (i = [0:n-1]) {
rotate([-key_indices[i]/len(alphabet)*360,0,0]) {
translate([i*10,0,0]) key_dial(alphabet, key=password[i], dia=diameter);
}
}
for (i = [0:n]) {
translate([-5+10*i,0,0]) {
rotate([0,0,180]) {
rotate([-45,0,0]) {
rotate([0,90,0]) {
e_ring(dia=diameter-2, indicator=true, clicker=i>0);
}
}
rotate([135,0,0]) {
rotate([0,90,0]) {
e_ring(dia=diameter-2);
}
}
}
}
}
case(n, diameter=diameter);
plug(n, diameter=diameter);
}
lock();