Files
crystalballer/Baller.scad
Stephen Carpenter f1322c070c Cleanup. Removed vestigial code
Cleanup. Fleshed out all major parts.
2021-01-16 09:39:35 -05:00

151 lines
3.1 KiB
OpenSCAD

use <inserts.scad>
use <threads.scad>
$fa = ($preview) ? 12 : 1;
$fs = ($preview) ? 2 : 1;
$incolor = true;
// Config
BallDiameter = 65;
BallClearance = 2;
BallSealWidth = 2;
PlateLip = 2;
PlateDiameter = BallDiameter + 2*(BallClearance + BallSealWidth + PlateLip);
PlateThick = BallSealWidth/2 + 1;
//plate_full();
PlateSep = 0;
pd = PlateDiameter+PlateSep;
pt = PlateThick;
echo("PD=", pd);
translate([pd+5,0]) plate_top(thickness=pt);
translate([0,pd+5]) plate_mid(thickness=pt);
translate([pd+5,pd+5]) cap_compression(PlateDiameter, pt);
translate([-(pd+5),0]) mold_wall(PlateDiameter, pt, BallDiameter);
translate([0,-(pd+5)]) plate_under();
stack(pt, expand=false) {
cap_compression(PlateDiameter, pt);
//plate_under();
//plate_mid(thickness=pt);
plate_top(thickness=pt);
mold_wall(PlateDiameter, pt, BallDiameter);
}
module stack(pt, ed=10 ,expand=false) {
d = expand ? pt + ed : pt+.01;
for (i = [0:$children-1]) {
translate([0,0,d*i]) children(i);
}
}
module mold_wall(pd, pt, bd, wt=3) {
threadc = $incolor ? "green" : undef;
difference() {
union() {
translate([0,0,8]) cylinder(d=pd+wt, h=bd/2+pt-8);
color(threadc) metric_thread(
diameter=pd+wt,
length=8.01,
internal=false);
}
translate([0,0,-.1]) cylinder(d1=pd-1, d2=pd+1, h=bd/2+pt+.2);
}
}
module cap_compression(pd, pt, th=7, wt=3) {
difference() {
cylinder(d=pd+2*wt, h=th);
translate([0,0,-.01]) cylinder(d=pd-6, h=5);
translate([0,0,pt]) metric_thread(diameter=pd+wt,length=th+.01, internal=true);
}
}
module plate(
d=PlateDiameter,
thickness = PlateThick)
{
translate([0,0,-thickness])
cylinder(d=d, h=thickness+.01);
}
module plate_mid(thickness = 1) {
translate([0,0,thickness]) {
ball(bottom=false);
plate(thickness=thickness);
register_seal();
}
}
module plate_top(thickness = 1) {
translate([0,0,thickness]) {
ball(bottom=false);
difference() {
plate(thickness=thickness);
register_seal();
}
}
}
module plate_under(thickness = 1) {
translate([0,0,thickness]) {
underball();
plate(thickness=thickness);
register_seal();
}
}
module ball(
bd=BallDiameter,
insert=true,
top = true,
bottom = true)
{
insertc = $incolor ? "gold" : undef;
maxz = top ? bd/2 : 0;
minz = bottom ? -bd/2 : 0;
echo("maxz:", maxz);
echo("minz:", minz);
difference() {
intersection() {
sphere(d=bd);
translate([0,0,(maxz+minz)/2])
cube([bd, bd, maxz-minz],center=true);
}
color(insertc) if (insert) for (iz = [-bd/2, bd/2]) {
rot = (iz < 0) ? 180 : 0;
//translate([0,0,bd/2])thread_insertM3($die=true);
translate([0,0,iz])
rotate([0,rot,0]) thread_insertM3($die=true);
}
}
}
module register_seal(
bd = BallDiameter,
cl = BallClearance, // Clearance around ball
sw = BallSealWidth, // Width of register
)
{
rotate_extrude()
translate([bd/2+cl,0,0])
circle(d=sw);
}
module underball() {
intersection() {
translate([0,0,9]) {
rotate_extrude(angle=360)
translate([10+15/2,0,0])
circle(d=20);
translate([0,0,-4])
cylinder(d=55, h=10, center=true);
}
cylinder(d=70,h=35);
}
}