123 lines
5.2 KiB
OpenSCAD
123 lines
5.2 KiB
OpenSCAD
|
// Glider Cube with Stand
|
||
|
// © 2022 by Peter Ludikovsky
|
||
|
// Licensed under CC BY-SA 4.0
|
||
|
// http://creativecommons.org/licenses/by-sa/4.0/
|
||
|
|
||
|
// Pin Connectors V2 by tbuser
|
||
|
// https://www.thingiverse.com/thing:10541
|
||
|
use <pins/pins.scad>
|
||
|
|
||
|
// What to print
|
||
|
part="both"; //[cube:Glider Cube,stand:Stand,both:Cube and Stand]
|
||
|
|
||
|
// Size sans rounded edges
|
||
|
size=100; // [30:1:150]
|
||
|
|
||
|
// Inset depth
|
||
|
depth=5; // [1:.5:5]
|
||
|
|
||
|
// Border width around the inset
|
||
|
border=6; // [1:1:6]
|
||
|
|
||
|
// Extruder size or pixel size of LCD
|
||
|
filament=.1;
|
||
|
|
||
|
elementsize=(size-border)/4;
|
||
|
elementdistance=(size-border)/28;
|
||
|
|
||
|
$fa= $preview ? 6 : 2;
|
||
|
$fs= $preview ? .4/2 : filament/2;
|
||
|
|
||
|
module glidercube(){
|
||
|
translate([0,0,(size/2)+(size/30)])
|
||
|
difference(){
|
||
|
union(){
|
||
|
difference(){
|
||
|
minkowski(){
|
||
|
cube([size,size,size],center=true);
|
||
|
sphere(d=(size/15));
|
||
|
}
|
||
|
translate([0,-size/2-(size/15),0])
|
||
|
cube([size-border,2*depth+(size/15),size-border],center=true);
|
||
|
translate([0,size/2+(size/15),0])
|
||
|
cube([size-border,2*depth+(size/15),size-border],center=true);
|
||
|
translate([-size/2-(size/15),0,0])
|
||
|
cube([2*depth+(size/15),size-border,size-border],center=true);
|
||
|
translate([size/2+(size/15),0,0])
|
||
|
cube([2*depth+(size/15),size-border,size-border],center=true);
|
||
|
}
|
||
|
|
||
|
translate([0, -size/2+depth-(size/30), (elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([(elementsize+elementdistance), -size/2+depth-(size/30), 0])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([-(elementsize+elementdistance), -size/2+depth-(size/30), -(elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([0, -size/2+depth-(size/30), -(elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([(elementsize+elementdistance), -size/2+depth-(size/30), -(elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
|
||
|
translate([size/2-depth+(size/30), (elementsize+elementdistance), (elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([size/2-depth+(size/30), -(elementsize+elementdistance), (elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([size/2-depth+(size/30), 0, 0])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([size/2-depth+(size/30), (elementsize+elementdistance), 0])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([size/2-depth+(size/30), 0, -(elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
|
||
|
translate([-(elementsize+elementdistance), size/2-depth+(size/30), (elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([(elementsize+elementdistance), size/2-depth+(size/30), 0])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([-(elementsize+elementdistance), size/2-depth+(size/30), 0])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([0, size/2-depth+(size/30), -(elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
translate([-(elementsize+elementdistance), size/2-depth+(size/30), -(elementsize+elementdistance)])
|
||
|
cube([elementsize,depth*2,elementsize], center=true);
|
||
|
|
||
|
translate([-size/2+depth-(size/30), (elementsize+elementdistance), (elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([-size/2+depth-(size/30), 0, 0])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([-size/2+depth-(size/30), -(elementsize+elementdistance), 0])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([-size/2+depth-(size/30), (elementsize+elementdistance), -(elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
translate([-size/2+depth-(size/30), 0, -(elementsize+elementdistance)])
|
||
|
cube([depth*2,elementsize,elementsize], center=true);
|
||
|
|
||
|
}
|
||
|
|
||
|
translate([0,0,-size/2-(size/30)])
|
||
|
pinhole(h=size/3, r=4*size/30, lh=size/10, lt=size/30, tight=false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module stand(){
|
||
|
union(){
|
||
|
rotate_extrude()
|
||
|
difference(){
|
||
|
square([size/2,size/3]);
|
||
|
translate([size/2+7*size/60,size/2])
|
||
|
circle(size/2);
|
||
|
}
|
||
|
translate([0,0,size/3])
|
||
|
pintack(h=size/3, r=4*size/30, lh=size/10, lt=size/30,bh=0,br=0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(part=="cube"){
|
||
|
glidercube();
|
||
|
}else if(part=="stand"){
|
||
|
stand();
|
||
|
} else {
|
||
|
translate([-size/1.5,0,0])
|
||
|
glidercube();
|
||
|
translate([size/1.5,0,0])
|
||
|
stand();
|
||
|
}
|