39 lines
No EOL
969 B
OpenSCAD
39 lines
No EOL
969 B
OpenSCAD
|
|
use <key_dial.scad>;
|
|
use <ring.scad>;
|
|
use <case.scad>;
|
|
use <plug.scad>;
|
|
|
|
|
|
module lock(alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ", password="CHAOS", diameter=50, xy_tolerance=0.2, z_tolerance=0.4, $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, xy_tolerance=xy_tolerance, z_tolerance=z_tolerance);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (i = [0:n]) {
|
|
translate([-5+10*i,0,0]) {
|
|
rotate([0,0,180]) {
|
|
rotate([0,90,0]) {
|
|
ring(dia=diameter-2, clicker=i>0, alphabet_length=len(alphabet), xy_tolerance=xy_tolerance, z_tolerance=z_tolerance);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
rotate([45,0,0]) {
|
|
case(n, diameter=diameter, xy_tolerance=xy_tolerance, z_tolerance=z_tolerance);
|
|
plug(n, diameter=diameter, xy_tolerance=xy_tolerance, z_tolerance=z_tolerance);
|
|
}
|
|
|
|
}
|
|
|
|
lock(); |