OpenSCAD

https://openscad.org/

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