You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
6.2 KiB
221 lines
6.2 KiB
|
|
/*
|
|
Creator : Kerem Yollu
|
|
date : 30.06.2021
|
|
Description : A simple Cube library with some of the most useful featured.
|
|
- Simple cube with or without all around roundig with the option of a flat top | keyCubeFull()
|
|
- Simple cube with or without rounded edges with flat top and bottom. | keyCubeRounded()
|
|
- Cube with opening defined by the desired wall thickness, intern and extern rounding radious and with the extra options of flat top and/or flat inside bottom | keyCubeEmpty()
|
|
- Cube wiht onpneing as described before but with an resses defined by his width heigt and rounding radious | keyCubeEmptyWithResses()
|
|
*/
|
|
|
|
$fn = 50;
|
|
|
|
|
|
cubeLenght = 20;
|
|
cubeWidht = 20;
|
|
cubeHeight = 40;
|
|
cubeRoundingRadious = 1;
|
|
cubeWallThickness = 1;
|
|
cubeInnerRoudingRadious = 2;
|
|
cubeRessesWidth = 1;
|
|
cubeRessesHeight = 2;
|
|
cubeRessesRadious = 3;
|
|
cubeCentered = false;
|
|
cubeFlatTop = true;
|
|
cubeFlatInside = true;
|
|
|
|
/*
|
|
x = Lenght | mm
|
|
y = Widht | mm
|
|
z = Height | mm
|
|
t = Wall Thickness | mm
|
|
r = extern rounding radious for minkowski if = 0 the cube exterior will not be rounded | mm
|
|
flat = Top Flat | true / flase
|
|
ce = Center or not | true / flase
|
|
*/
|
|
//keyCubeFull(cubeLenght,cubeWidht,cubeHeight,cubeRoundingRadious,cubeFlatTop,cubeCentered);
|
|
module keyCubeFull(x, y, z, r, flat = false, ce = true)
|
|
{
|
|
if(r>0)
|
|
{
|
|
if (flat)
|
|
{
|
|
difference()
|
|
{
|
|
minkowski()
|
|
|
|
{
|
|
x = x - r*2;
|
|
y = y - r*2;
|
|
if(ce)
|
|
|
|
{
|
|
translate([-x/2,-y/2,-z/2+r])cube([x, y, z+r]);
|
|
}
|
|
else
|
|
|
|
{
|
|
translate([r,r,r])cube([x, y, z]);
|
|
}
|
|
sphere(r=r);
|
|
}
|
|
|
|
if(ce)
|
|
{
|
|
translate([-x/2-0.1,-y/2,z/2])cube([x+0.2, y, 3*r]);
|
|
}
|
|
else
|
|
{
|
|
translate([0-0.1,0,z])cube([x+0.2, y, 2*r]);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
minkowski()
|
|
{
|
|
x = x - r*2;
|
|
y = y - r*2;
|
|
z = z - r*2;
|
|
|
|
if(ce)
|
|
{
|
|
translate([-x/2,-y/2,-z/2])cube([x, y, z]);
|
|
}
|
|
else
|
|
{
|
|
translate([r,r,r])cube([x, y, z]);
|
|
}
|
|
sphere(r=r);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cube([x, y, z], center = ce);
|
|
}
|
|
}
|
|
|
|
/*
|
|
x = Lenght | mm
|
|
y = Widht | mm
|
|
z = Height | mm
|
|
rad = extern rounding radious | mm
|
|
ce = Center or not | true / flase
|
|
*/
|
|
//keyCubeRounded(10,10,4,3,true);
|
|
module keyCubeRounded(x,y,z,rad,ce = true)
|
|
{
|
|
if(rad > 0)
|
|
{
|
|
if(ce)
|
|
{
|
|
translate([-x/2,-y/2,-z/2])hull()
|
|
{
|
|
translate([rad,rad,0])cylinder(r=rad, h=z);
|
|
translate([x-rad,rad,0])cylinder(r=rad, h=z);
|
|
translate([rad,y-rad,0])cylinder(r=rad, h=z);
|
|
translate([x-rad,y-rad,0])cylinder(r=rad, h=z);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hull()
|
|
{
|
|
translate([rad,rad,0])cylinder(r=rad, h=z);
|
|
translate([x-rad,rad,0])cylinder(r=rad, h=z);
|
|
translate([rad,y-rad,0])cylinder(r=rad, h=z);
|
|
translate([x-rad,y-rad,0])cylinder(r=rad, h=z);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cube([x,y,z], center = ce);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
x = Lenght | mm
|
|
y = Widht | mm
|
|
z = Height | mm
|
|
t = Wall Thickness | mm
|
|
r1 = extern rounding radious for minkowski if = 0 the cube exterior will not be rounded | mm
|
|
r2 = intern rounding radious for minkowski if = 0 the cube interior will not be rounded | mm
|
|
tFlat = Top Flat | true / flase
|
|
iFlat = Inside bottom flat | true / flase
|
|
ce = Center or not | true / flase
|
|
*/
|
|
//keyCubeEmpty(cubeLenght,cubeWidht,cubeHeight,cubeWallThickness,cubeRoundingRadious,cubeInnerRoudingRadious,cubeFlatTop,cubeFlatInside,cubeCentered);
|
|
module keyCubeEmpty(x,y,z,t,r1,r2,tFlat = false, Iflat = false, ce = true)
|
|
{
|
|
if(t < r1)
|
|
{
|
|
echo("please set wall thickness at least equal to the extern rounding diameter (r1)");
|
|
}
|
|
else
|
|
{
|
|
difference()
|
|
{
|
|
keyCubeFull(x,y,z,r1,tFlat,ce);
|
|
if(ce)
|
|
{
|
|
if(Iflat){translate([0,0,t])keyCubeRounded(x-t*2,y-t*2,z,r2/2,ce);}
|
|
else{translate([0,0,t])keyCubeFull(x-t*2,y-t*2,z,r2,false,ce);}
|
|
}
|
|
else
|
|
{
|
|
if(Iflat){translate([t,t,t])keyCubeRounded(x-t*2,y-t*2,z,r2/2,ce);}
|
|
else{translate([t,t,t])keyCubeFull(x-t*2,y-t*2,z,r2,false,ce);}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
x = Lenght | mm
|
|
y = Widht | mm
|
|
z = Height | mm
|
|
t = Wall Thickness | mm
|
|
r1 = extern rounding radious for minkowski if = 0 the cube exterior will not be rounded | mm
|
|
r2 = intern rounding radious for minkowski if = 0 the cube interior will not be rounded | mm
|
|
rsHeigh = Resses height | mm
|
|
rsWidth = Resses Width | mm
|
|
rsRad = Resses rounding radious | mm if = 0 the cresses corners will not be rounded
|
|
tFlat = Top Flat | true / flase
|
|
iFlat = Inside bottom flat | true / flase
|
|
ce = Center or not | true / flase
|
|
*/
|
|
//keyCubeEmptyWithResses(cubeLenght,cubeWidht,cubeHeight,cubeWallThickness,cubeRoundingRadious,cubeInnerRoudingRadious,cubeRessesHeight,cubeRessesWidth,cubeRessesRadious,cubeFlatTop,cubeFlatInside,cubeCentered);
|
|
module keyCubeEmptyWithResses(x,y,z,t,r1,r2,rsHeigh,rsWidth,rsRad,tFlat = false, Iflat = false, ce = true)
|
|
{
|
|
if(ce)
|
|
{
|
|
difference()
|
|
{
|
|
keyCubeEmpty(x,y,z,t,r1,r2,tFlat,Iflat,ce);
|
|
translate([0,0,z/2-rsHeigh/2])keyCubeRounded(x-t*2+rsWidth*2,y-t*2+rsWidth*2,rsHeigh,rsRad/2,ce);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
difference()
|
|
{
|
|
keyCubeEmpty(x,y,z,t,r1,r2,tFlat,Iflat,ce);
|
|
translate([t-rsWidth,t-rsWidth,z-rsHeigh])keyCubeRounded(x-t*2+rsWidth*2,y-t*2+rsWidth*2,rsHeigh,rsRad/2,ce);
|
|
}
|
|
}
|
|
}
|
|
|
|
module keyPolyRounded(a=[0,0,0],b=[1,0,0],c=[1,1,0],d=[0,1,0],height=1,rad=1)
|
|
{
|
|
hull()
|
|
{
|
|
translate([a[0]+rad,a[1]+rad,a[2]])cylinder(r=rad, h=height);
|
|
translate([b[0]-rad,b[1]+rad,b[2]])cylinder(r=rad, h=height);
|
|
translate([c[0]-rad,c[1]-rad,c[2]])cylinder(r=rad, h=height);
|
|
translate([d[0]+rad,d[1]-rad,d[2]])cylinder(r=rad, h=height);
|
|
}
|
|
} |