OpenSCAD
Beispiel eines Porgramms zur Erzeugung einer Box mit Fingerpassung für den Lasercutter in 2D zum Export als DXF-Datei
/* Fingerbox
- Programm zur Erzeugung einer Box mit Fingerpassung durch Lasercutter
- in 2D zum Export als DXF-Datei,
- alle Angaben in Millimeter,
- Laserstrahldicke wird berücksichtigt!
- mit Passnocke!!
- Stefan Abel 2016
*/
//Definition von Variablen
Laenge = 80; //in X-Richtung
Breite = 40; //in Y-Richtung
Hoehe = 20; //in Z-Richtung
FB = 4; //Fingerbreite
MD = 3; //Materialdicke
Abstand = 2; // für die Ausgabe
PN = 0.10; //Passnockenhoehe zur besseren Passung
//HDF 5mm: 0.05
//HDF 3mm: 0.08 (0.10 bei lockerer Passung)
LD = 0.20; //Laserstrahldicke
//HDF 5mm: 0.10 (19mm/s;60/58%)
//HDF 3mm: 0.15 (33mm/s;60/58%) (0.20 lockere Passung)
LDH = LD*0.5;
//Hauptprogramm
//Bauteil (Xdim,Ydim,FB,MD,SO,SU,SL,SR)
// SO,SU,SR,SL sind Schalter für Fingerpassung
// für die Kanten oben, unten, rechts, links
// 0:glatte Kante
// 1:Nuten
// 2:Nuten mit Passnocke (siehe Mass für PN)
// 3:glatte Finger
// 4:Finger mit Passnocke (siehe Mass für PN)
//Bodenplatte
color(„Black“,0.8) offset(delta = LDH) Bauteil (Laenge,Breite,FB,MD,3,3,1,1);
//Deckel mit „Griff“
color(„Black“,0.4) difference()
{
translate ([0,-Breite-Abstand,0]) offset(delta = LDH) Bauteil (Laenge,Breite,FB,MD,3,3,1,1);
translate ([Laenge0.5-5+7,-12-Breite1.5-Abstand,0]) square([10,24],false);
translate ([Laenge0.5-5-7,-12-Breite1.5-Abstand,0]) square([10,24],false);
}
//Deckel ohne „Griff“
//color(„Black“,0.4) translate ([0,-Breite-Abstand,0]) offset(delta = LDH) Bauteil (Laenge,Breite,FB,MD,3,3,1,1);
//Längsseitenteile (beide gleich)
color(„Indigo“,0.8) translate ([0,Breite+Abstand,0]) offset(delta = LDH) Bauteil (Laenge,Hoehe,FB,MD,1,2,1,1);
color(„Indigo“,0.4) translate ([0,Breite+Hoehe+2*Abstand,0]) offset(delta = LDH) Bauteil (Laenge,Hoehe,FB,MD,1,2,1,1);
//Breitseitenteile (beide gleich)
color(„Cyan“,0.8) translate ([-Hoehe-Abstand,0,0]) offset(delta = LDH) Bauteil (Hoehe,Breite,FB,MD,4,4,3,4);
color(„Cyan“,0.4) translate ([-Hoehe-Abstand,Breite+Abstand,0]) offset(delta = LDH) Bauteil (Hoehe,Breite,FB,MD,4,4,3,4);
//Visualisierung der Box in 3D
//color(„Gold“,0.8) translate ([0,-Breite,0]) cube([Laenge,Breite,Hoehe], false);
//Unterprogramm als Module
module Bauteil (Xdim,Ydim,FB,MD,SO,SU,SL,SR)
difference()
{
echo (Xdim,Ydim,FB,MD,SO,SU,SR,SL);
FZx = round ((Xdim-FB)/(2FB)-2); echo (FZx); Ax = (Xdim-(2FZx*FB+FB))/2;
echo (Ax);
echo (Xdim,Ydim,FB,MD,SO,SU,SR,SL);
FZy = round ((Ydim-FB)/(2*FB)-2);
echo (FZy);
Ay = (Ydim-(2*FZy*FB+FB))/2;
echo (Ay);
//Grundfläche
polygon(points=[[0,Ydim],[Xdim,Ydim],[Xdim,0],[0,0]]);
//von der Grundfläche werden Finger/Nuten entfernt
//Entfernungen oben und unten
for (x = [Ax:FB*2:Xdim-Ax])
{
//Nuten oben und unten
if (SO==1)
polygon(points=[[x+0,Ydim],[x+FB,Ydim],[x+FB,Ydim-MD],[x+0,Ydim-MD]]);
if (SU==1)
polygon(points=[[x+0,MD],[x+FB,MD],[x+FB,0],[x+0,0]]);
if (SO==2)
polygon(points=[[x+0,Ydim],[x+FB,Ydim],[x+FB,Ydim-0.2*MD],[x+FB-PN,Ydim-0.4*MD],[x+FB-PN,Ydim-0.6*MD],[x+FB,Ydim-0.8*MD],[x+FB,Ydim-MD],[x+0,Ydim-MD],[x+0,Ydim-MD+0.2*MD],[x+0+PN,Ydim-MD+0.4*MD],[x+0+PN,Ydim-MD+0.6*MD],[x+0,Ydim-MD+0.8*MD], ]);
if (SU==2)
polygon(points=[[x+0,MD],[x+FB,MD],[x+FB,MD-0.2*MD],[x+FB-PN,MD-0.4*MD],[x+FB-PN,MD-0.6*MD],[x+FB,MD-0.8*MD],[x+FB,0],[x+0,0],[x,0+0.2*MD],[x+PN,0+0.4*MD],[x+PN,0+0.6*MD],[x,0+0.8*MD]]);
//Finger oben und unten
if (SO==3)
{
polygon(points=[[0,Ydim],[Ax,Ydim],[Ax,Ydim-MD],[0,Ydim-MD]]);
polygon(points=[[Xdim-Ax,Ydim],[Xdim,Ydim],[Xdim,Ydim-MD],[Xdim-Ax,Ydim-MD]]);
polygon(points=[[x-FB,Ydim],[x,Ydim],[x,Ydim-MD],[x-FB,Ydim-MD]]);
}
if (SU==3)
{
polygon(points=[[0,MD],[Ax,MD],[Ax,0],[0,0]]);
polygon(points=[[Xdim-Ax,MD],[Xdim,MD],[Xdim,0],[Xdim-Ax,0]]);
polygon(points=[[x-FB,MD],[x,MD],[x,0],[x-FB,0]]);
}
if (SO==4)
{
polygon(points=[[0,Ydim],[Ax,Ydim],[Ax,Ydim-0.2*MD],[Ax-PN,Ydim-0.4*MD],[Ax-PN,Ydim-0.6*MD],[Ax,Ydim-0.8*MD],[Ax,Ydim-MD],[0,Ydim-MD]]);
polygon(points=[[Xdim-Ax,Ydim],[Xdim,Ydim],[Xdim,Ydim-MD],[Xdim-Ax,Ydim-MD],[Xdim-Ax,Ydim-MD+0.2*MD],[Xdim-Ax+PN,Ydim-MD+0.4*MD],[Xdim-Ax+PN,Ydim-MD+0.6*MD],[Xdim-Ax,Ydim-MD+0.8*MD]]);
polygon(points=[[x+FB,Ydim],[x+FB,Ydim-0.2*MD],[x+FB+PN,Ydim-0.4*MD],[x+FB+PN,Ydim-0.6*MD],[x+FB,Ydim-0.8*MD],[x+FB,Ydim-1.0*MD],[x+2*FB,Ydim-1.0*MD],[x+2*FB,Ydim-0.8*MD],[x+2*FB-PN,Ydim-0.6*MD],[x+2*FB-PN,Ydim-0.4*MD],[x+2*FB,Ydim-0.2*MD],[x+2*FB,Ydim]]);
}
if (SU==4)
{
polygon(points=[[0,MD],[Ax,MD],[Ax,MD-0.2*MD],[Ax-PN,MD-0.4*MD],[Ax-PN,MD-0.6*MD],[Ax,MD-0.8*MD],[Ax,0],[0,0]]);
polygon(points=[[Xdim-Ax,MD],[Xdim,MD],[Xdim,0],[Xdim-Ax,0],[Xdim-Ax,0.2*MD],[Xdim-Ax+PN,0.4*MD],[Xdim-Ax+PN,0.6*MD],[Xdim-Ax,0.8*MD],[Xdim-Ax,MD]]);
polygon(points=[[x+FB,MD],[x+FB,MD-0.2*MD],[x+FB+PN,MD-0.4*MD],[x+FB+PN,MD-0.6*MD],[x+FB,MD-0.8*MD],[x+FB,MD-1.0*MD],[x+2*FB,MD-1.0*MD],[x+2*FB,MD-0.8*MD],[x+2*FB-PN,MD-0.6*MD],[x+2*FB-PN,MD-0.4*MD],[x+2*FB,MD-0.2*MD],[x+2*FB,MD]]);
}
}
//Entfernungen links und rechts
for (y = [Ay:FB*2:Ydim-Ay])
{
//Nuten links und rechts
if (SL==1)
polygon(points=[[0,y+FB],[MD,y+FB],[MD,y],[0,y]]);
if (SR==1)
polygon(points=[[Xdim-MD,y+FB],[Xdim,y+FB],[Xdim,y],[Xdim-MD,y]]);
if (SL==2)
polygon(points=[[0,y+FB],[0.2*MD,y+FB],[0.4*MD,y+FB-PN],[0.6*MD,y+FB-PN],[0.8*MD,y+FB],[MD,y+FB],[MD,y],[0.2*MD,y],[0.4*MD,y+PN],[0.6*MD,y+PN],[0.8*MD,y],[0,y]]);
if (SR==2)
polygon(points=[[Xdim-MD,y+FB],[Xdim-MD+0.2*MD,y+FB],[Xdim-MD+0.4*MD,y+FB-PN],[Xdim-MD+0.6*MD,y+FB-PN],[Xdim-MD+0.8*MD,y+FB],[Xdim,y+FB],[Xdim,y],[Xdim-MD+0.2*MD,y],[Xdim-MD+0.4*MD,y+PN],[Xdim-MD+0.6*MD,y+PN],[Xdim-MD+0.8*MD,y],[Xdim-MD,y]]);
//Finger links und rechts
if (SL==3)
{
polygon(points=[[0,Ydim],[MD,Ydim],[MD,Ydim-Ay],[0,Ydim-Ay]]);
polygon(points=[[0,Ay],[MD,Ay],[MD,0],[0,0]]);
polygon(points=[[0,y+2*FB],[MD,y+2*FB],[MD,y+FB],[0,y+FB]]);
}
if (SR==3)
{
polygon(points=[[Xdim-MD,Ydim],[Xdim,Ydim],[Xdim,Ydim-Ay],[Xdim-MD,Ydim-Ay]]);
polygon(points=[[Xdim-MD,Ay],[Xdim,Ay],[Xdim,0],[Xdim-MD,0]]);
polygon(points=[[Xdim-MD,y+2*FB],[Xdim,y+2*FB],[Xdim,y+FB],[Xdim-MD,y+FB]]);
}
if (SL==4)
{
polygon(points=[[0,Ydim],[MD,Ydim],[MD,Ydim-Ay],[0.8*MD,Ydim-Ay],[0.6*MD,Ydim-Ay+PN],[0.4*MD,Ydim-Ay+PN],[0.2*MD,Ydim-Ay],[0,Ydim-Ay]]);
polygon(points=[[0,Ay],[0.2*MD,Ay],[0.4*MD,Ay-PN],[0.6*MD,Ay-PN],[0.8*MD,Ay],[MD,Ay],[MD,0],[0,0]]);
polygon(points=[[0,y+2*FB],[0.2*MD,y+2*FB],[0.4*MD,y+2*FB-PN],[0.6*MD,y+2*FB-PN],[0.8*MD,y+2*FB],[1.0*MD,y+2*FB],[1.0*MD,y+FB],[0.8*MD,y+FB],[0.6*MD,y+FB+PN],[0.4*MD,y+FB+PN],[0.2*MD,y+FB],[0,y+FB]]);
}
if (SR==4)
{
polygon(points=[[Xdim-MD,Ydim],[Xdim,Ydim],[Xdim,Ydim-Ay],[Xdim-0.2*MD,Ydim-Ay],[Xdim-0.4*MD,Ydim-Ay+PN],[Xdim-0.6*MD,Ydim-Ay+PN],[Xdim-0.8*MD,Ydim-Ay],[Xdim-MD,Ydim-Ay]]);
polygon(points=[[Xdim-MD,Ay],[Xdim-MD+0.2*MD,Ay],[Xdim-MD+0.4*MD,Ay-PN],[Xdim-MD+0.6*MD,Ay-PN],[Xdim-MD+0.8*MD,Ay],[Xdim,Ay],[Xdim,0],[Xdim-MD,0]]);
polygon(points=[[Xdim-MD,y+2*FB],[Xdim-MD+0.2*MD,y+2*FB],[Xdim-MD+0.4*MD,y+2*FB-PN],[Xdim-MD+0.6*MD,y+2*FB-PN],[Xdim-MD+0.8*MD,y+2*FB],[Xdim-MD+1.0*MD,y+2*FB],[Xdim-MD+1.0*MD,y+FB],[Xdim-MD+0.8*MD,y+FB],[Xdim-MD+0.6*MD,y+FB+PN],[Xdim-MD+0.4*MD,y+FB+PN],[Xdim-MD+0.2*MD,y+FB],[Xdim-MD,y+FB]]);
}
}
}
==> zurück zu Fablab-Software