scad/Glider Cube/Glidercube.scad
2024-06-24 13:56:57 +00:00

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();
}