feat: better parametrization of length and diameter, add wrapperscript
This commit is contained in:
parent
49a0fe42fd
commit
50f1def8d5
7 changed files with 93 additions and 16 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
*stl
|
||||
*3mf
|
||||
out/
|
||||
|
|
28
case.scad
28
case.scad
|
@ -1,35 +1,47 @@
|
|||
|
||||
module case(n=5, tolerance=0.2, $fn=60) {
|
||||
module case(n=5, diameter=50, tolerance=0.2, $fn=60) {
|
||||
union() {
|
||||
translate([-8,0,0]) {
|
||||
rotate([0,90,0]) {
|
||||
// outer cylinder
|
||||
difference() {
|
||||
cylinder(h=n*10+6, d=39);
|
||||
cylinder(h=n*10+6, d=diameter-11);
|
||||
translate([0,0,-1]) {
|
||||
cylinder(h=n*10+8, d=33);
|
||||
cylinder(h=n*10+8, d=diameter-17);
|
||||
}
|
||||
// key cutout
|
||||
translate([-20,-1.5,-1]) {
|
||||
translate([-diameter/2+4,-1.5,-1]) {
|
||||
cube([7,3,n*10+7]);
|
||||
}
|
||||
// cutouts for e-clips
|
||||
rotate([0,0,45]) {
|
||||
for (i = [0:n]) {
|
||||
translate([0,0,10*i+3]) {
|
||||
cube([5, 50, 3], center=true);
|
||||
cube([50, 5, 3], center=true);
|
||||
cube([5, diameter, 3], center=true);
|
||||
cube([diameter, 5, 3], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// end cap
|
||||
translate([0,0,(n+1)*10-2.5]) {
|
||||
cylinder(d=50,h=5, center=true);
|
||||
cylinder(d=diameter,h=5, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case(n=5);
|
||||
|
||||
// DEFAULTS FOR COMMAND LINE INVOCATION
|
||||
|
||||
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
N = 5;
|
||||
DIAMETER = 50;
|
||||
TOLERANCE = 0.2;
|
||||
FN = 60;
|
||||
|
||||
case(
|
||||
n=N,
|
||||
diameter=DIAMETER,
|
||||
tolerance=TOLERANCE, $fn=FN);
|
21
e_ring.scad
21
e_ring.scad
|
@ -1,5 +1,6 @@
|
|||
|
||||
module e_ring(alphabet_length=26, dia=48, width=3, thick=2, spoke_depth=4.5, spoke_width=7, key_depth=3, key_length=4, tolerance = 0.2,indicator=false, clicker=false, $fn=60) {
|
||||
|
||||
module e_ring(alphabet_length=26, dia=48, width=3, thick=2, spoke_depth=4.5, spoke_width=7, key_depth=3, key_length=4, tolerance = 0.2, indicator=false, clicker=false, $fn=60) {
|
||||
|
||||
difference() { // halfing
|
||||
union() {
|
||||
|
@ -60,4 +61,20 @@ module e_ring(alphabet_length=26, dia=48, width=3, thick=2, spoke_depth=4.5, spo
|
|||
}
|
||||
}
|
||||
|
||||
e_ring();
|
||||
|
||||
// DEFAULTS FOR COMMAND LINE INVOCATION
|
||||
|
||||
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
DIAMETER = 50;
|
||||
TOLERANCE = 0.2;
|
||||
FN = 60;
|
||||
INDICATOR = false;
|
||||
CLICKER = false;
|
||||
|
||||
|
||||
e_ring(
|
||||
alphabet_length=len(ALPHABET),
|
||||
dia=DIAMETER-2,
|
||||
indicator=INDICATOR,
|
||||
clicker=CLICKER,
|
||||
tolerance=TOLERANCE, $fn=FN);
|
||||
|
|
|
@ -40,6 +40,20 @@ module key_dial(alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ", key="A", width=7, dia=50,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// DEFAULTS FOR COMMAND LINE INVOCATION
|
||||
|
||||
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
KEY = "A";
|
||||
DIAMETER = 50;
|
||||
TOLERANCE = 0.2;
|
||||
FN = 60;
|
||||
INDEX = 0;
|
||||
|
||||
rotate([0,-90,0]) {
|
||||
key_dial();
|
||||
key_dial(
|
||||
alphabet=ALPHABET,
|
||||
key=KEY,
|
||||
dia=DIAMETER,
|
||||
tolerance=TOLERANCE, $fn=FN);
|
||||
}
|
|
@ -10,7 +10,7 @@ module lock(alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ", password="CHAOS", text_width=
|
|||
n = len(password);
|
||||
|
||||
for (i = [0:n-1]) {
|
||||
translate([i*10,0,0]) key_dial(alphabet, key=password[i], text_width=text_width);
|
||||
translate([i*10,0,0]) key_dial(alphabet, key=password[i], dia=diameter, text_width=text_width);
|
||||
}
|
||||
|
||||
for (i = [0:n]) {
|
||||
|
@ -18,12 +18,12 @@ module lock(alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ", password="CHAOS", text_width=
|
|||
rotate([0,0,180]) {
|
||||
rotate([-45,0,0]) {
|
||||
rotate([0,90,0]) {
|
||||
e_ring(indicator=true, clicker=i>0);
|
||||
e_ring(dia=diameter-2, indicator=true, clicker=i>0);
|
||||
}
|
||||
}
|
||||
rotate([135,0,0]) {
|
||||
rotate([0,90,0]) {
|
||||
e_ring();
|
||||
e_ring(dia=diameter-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
16
plug.scad
16
plug.scad
|
@ -2,7 +2,7 @@
|
|||
module plug(n=5, diameter=50, tolerance=0.2, $fn=60) {
|
||||
union() {
|
||||
// key
|
||||
translate([-10,-1.25,15.5]) {
|
||||
translate([-10,-1.25,(diameter-19)/2]) {
|
||||
difference() {
|
||||
cube([10*n+6.5,2.5,6]);
|
||||
// key cutouts
|
||||
|
@ -42,4 +42,16 @@ module plug(n=5, diameter=50, tolerance=0.2, $fn=60) {
|
|||
}
|
||||
}
|
||||
|
||||
plug(n=5);
|
||||
|
||||
// DEFAULTS FOR COMMAND LINE INVOCATION
|
||||
|
||||
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
N = 5;
|
||||
DIAMETER = 50;
|
||||
TOLERANCE = 0.2;
|
||||
FN = 60;
|
||||
|
||||
plug(
|
||||
n=N,
|
||||
diameter=DIAMETER,
|
||||
tolerance=TOLERANCE, $fn=FN);
|
||||
|
|
21
render.sh
Executable file
21
render.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
|
||||
ALPHABET=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
N=5
|
||||
DIAMETER=50
|
||||
TOLERANCE=0.2
|
||||
FN=60
|
||||
|
||||
ARGS=("-q" "-DALPHABET=\"$ALPHABET\"" "-DN=$N" "-DDIAMETER=$DIAMETER" "-DTOLERANCE=$TOLERANCE" "-DFN=$FN")
|
||||
|
||||
mkdir -p out
|
||||
|
||||
openscad "${ARGS[@]}" -o out/plug.stl plug.scad
|
||||
openscad "${ARGS[@]}" -o out/case.stl case.scad
|
||||
openscad "${ARGS[@]}" -o out/e_ring.stl e_ring.scad
|
||||
openscad "${ARGS[@]}" -DINDICATOR=true -o out/e_ring_indicator.stl e_ring.scad
|
||||
openscad "${ARGS[@]}" -DINDICATOR=true -DCLICK=true -o out/e_ring_indicator_click.stl e_ring.scad
|
||||
|
||||
while read -rn1 char; do
|
||||
openscad "${ARGS[@]}" "-DKEY=\"$char\"" -o "out/key_dial_${char}.stl" key_dial.scad
|
||||
done < <(echo -n "$ALPHABET")
|
Loading…
Add table
Reference in a new issue