Gesellschaftsspiel-Replikator/W6 V1.1: Unterschied zwischen den Versionen

Aus Stratum 0
Wechseln zu:Navigation, Suche
K (-korr)
(Neuerungen Version 1.12: -typo)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Mal ein flexibleres Angebot. Dürfte sich selbst erklären. Voreingestellt ist ein Teil, bei dem man sieht, was so ungefähr geht und kein sinnvoller Würfel. Alle bisher diskutierten Würfel mit Ausnahme der Farbwürfel lassen sich so realisieren. Auch der Würfel aus V1 ist noch möglich. Leider noch nichts testgedruckt. Mir fehlt hier noch die Möglichkeit. Kommentare sind willkommen. Ein W6-Replikator könnte die Zahlen am Anfang einstellen. Das dürfte programmtechnisch nicht allzu aufwendig sein.
+
Mal ein flexibleres Angebot. Dürfte sich selbst erklären. Voreingestellt ist ein Teil, bei dem man sieht, was so ungefähr geht und kein sinnvoller Würfel. Alle bisher diskutierten Würfel mit Ausnahme der Farbwürfel lassen sich so realisieren. Auch der Würfel aus V1 ist noch möglich. Leider noch nichts testgedruckt. Mir fehlt hier noch die Möglichkeit. Kommentare sind willkommen. Ein Kubator-Modul für den Gesellschaftsspiel-Replikator könnte die Zahlen am Anfang einstellen. Das dürfte programmtechnisch nicht allzu aufwendig sein.
 +
 
 +
== Neuerungen Version 1.12 ==
 +
 
 +
* Bugfixes
 +
* Neue Seitenvorschläge (Dreieck, Fünfeck, Sechseck, Siebeneck, Achteck)
 +
* Neue Ausschnittsmöglichkeiten (Dreieck, Fünfeck, Sechseck, Siebeneck, Achteck)
  
 
<pre>
 
<pre>
 +
 +
// Kubator 1.12
 
// Würfel massiv drucken, um möglichst faire Würfel zu erhalten!   
 
// Würfel massiv drucken, um möglichst faire Würfel zu erhalten!   
  
Zeile 38: Zeile 46:
 
// 26 6 kuglige Punkte  
 
// 26 6 kuglige Punkte  
 
// 27 taktiles Quadrat
 
// 27 taktiles Quadrat
 +
// 28 Dreieckiger Ausschnitt
 +
// 29 Fünfeckiger Ausschnitt
 
// 30 ausgeschnittenes X
 
// 30 ausgeschnittenes X
 
// 31 taktiles X  
 
// 31 taktiles X  
Zeile 43: Zeile 53:
 
// 33 ausgeschnittener Stern
 
// 33 ausgeschnittener Stern
 
// 34 taktiler Stern  
 
// 34 taktiler Stern  
 +
// 35 Sechseckiger Ausschnitt
 +
// 36 Siebeneckiger Ausschnitt
 +
// 37 Achteckiger Ausschnitt
 +
// 38 Taktiles Dreieck
 +
// 39 Taktiler Fünfeck
 +
// 40 Taktiles Sechseck
 +
// 41 Taktiles Siebeneck
 +
// 42 Taktiles Achteck
  
 
// hier die Nummern der gewünschten Seiten eintragen
 
// hier die Nummern der gewünschten Seiten eintragen
Zeile 52: Zeile 70:
 
seite_hinten = 26;  
 
seite_hinten = 26;  
  
abgerundet = 2; // Aussehen des Würfelkörpers
+
abgerundet = 1; // Aussehen des Würfelkörpers
 
                 // Werte ganzahlig von 0 bis 4
 
                 // Werte ganzahlig von 0 bis 4
 
                 // 0 = keine Abrundung der Ecken und Kanten
 
                 // 0 = keine Abrundung der Ecken und Kanten
Zeile 62: Zeile 80:
 
abrundungsgroesse = 0.7;  // je kleiner desto runder (0.55 <= abrundungsgroesse <= 1.0)
 
abrundungsgroesse = 0.7;  // je kleiner desto runder (0.55 <= abrundungsgroesse <= 1.0)
  
koerperfarbe = "black"; // Farbe des Würfelkörper
+
koerperfarbe = "white"; // Farbe des Würfelkörper
kerbenfarbe = "black"; // Farbe der Ausschnitte  
+
kerbenfarbe = "white"; // Farbe der Ausschnitte  
augenfarbe = "yellow"; // Farbe der Augen
+
augenfarbe = "black"; // Farbe der Augen
punktfarbe = "white"; // Farbe der taktilen Punkte
+
punktfarbe = "black"; // Farbe der taktilen Punkte
  
 
ausschnittstyp = 1; // 1 = quadratischer Ausschnitt
 
ausschnittstyp = 1; // 1 = quadratischer Ausschnitt
 
                     // 2 = kreisförmiger Ausschnitt
 
                     // 2 = kreisförmiger Ausschnitt
 +
                    // n (n > 2) = n-eckiger Ausschnitt
  
tiefe_ausschnitt = 2; // Tiefe der ausgeschnittenen Bereiche (in mm)
+
kerbe = 2; // Tiefe der ausgeschnittenen Bereiche (in mm)
 
ausschnitt = 13; // Seitenlänge der ausgeschnittenen Bereiche bei quadratischem Ausschnitt(in mm)
 
ausschnitt = 13; // Seitenlänge der ausgeschnittenen Bereiche bei quadratischem Ausschnitt(in mm)
 
kreisdurchmesser = 7.5; // Durchmesser des Kreises bei kreisförmigem Ausschnitt (in mm)
 
kreisdurchmesser = 7.5; // Durchmesser des Kreises bei kreisförmigem Ausschnitt (in mm)
Zeile 83: Zeile 102:
 
abstand_kugelpunkte=4; // Abstand der kugligen Punkte (in mm
 
abstand_kugelpunkte=4; // Abstand der kugligen Punkte (in mm
 
basis_kugelpunkte=1; // Basisdurchmesser der erhabenen kugligen Punkte (in mm)
 
basis_kugelpunkte=1; // Basisdurchmesser der erhabenen kugligen Punkte (in mm)
// wird auf tiefe_ausschnitt gesetzt, wenn er kleiner als diese Tiefe
+
// wird auf kerbe gesetzt, wenn er kleiner als diese Tiefe
  
 
augenabstand=4.5; // Abstand der Augen von der Mitte der Seiten (in mm) bei Seiten 11 bis 16
 
augenabstand=4.5; // Abstand der Augen von der Mitte der Seiten (in mm) bei Seiten 11 bis 16
Zeile 93: Zeile 112:
 
quadgroesse = 8; // Seitenlänge des inneren Quadrates bei Seite 27 (in mm)
 
quadgroesse = 8; // Seitenlänge des inneren Quadrates bei Seite 27 (in mm)
  
aufloesung = 60;   // je größer desto genauer der Würfel
+
//$fn = 70;   // je größer desto genauer der Würfel
 
                   // je größer desto langsamer die Berechnung
 
                   // je größer desto langsamer die Berechnung
 
                   // für Testzwecke auskommentieren  
 
                   // für Testzwecke auskommentieren  
  
// Kopierbereich (hier können fertige Vorlagen hineinkopiert werden)
+
// Kopierbereich (hier fertige Vorlagen hineinkopieren)
 +
 
  
  
Zeile 106: Zeile 126:
 
// ab hier nichts verändern
 
// ab hier nichts verändern
  
kerbe = tiefe_ausschnitt;
 
 
r=-kante/2;
 
r=-kante/2;
 
r2=(d_auge/2);
 
r2=(d_auge/2);
 
tiefe = kerbe * 2;
 
tiefe = kerbe * 2;
 
punktpos=kante/2-kerbe;
 
punktpos=kante/2-kerbe;
$fn = aufloesung;
+
 
  
 
main();
 
main();
Zeile 218: Zeile 237:
 
}
 
}
  
module cut_circle () {
+
module cut_circle (n=0) {
 +
if (n == 0) {
 
translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true);
 
translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true);
 +
}
 +
if (n > 0) {
 +
translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true, $fn=n);
 +
}
 +
 
}
 
}
  
Zeile 288: Zeile 313:
  
 
module add_strich () {
 
module add_strich () {
translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate ([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
 
}
 
}
  
 
module add_star () {
 
module add_star () {
translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) cube([strichdicke, strichlaenge, tiefe],center=true);
translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
 
}
 
}
 
  
 
module add_plus () {
 
module add_plus () {
translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*kerbe],center=true);
+
translate([0,0,-kante/2+kerbe]) cube([strichdicke, strichlaenge, tiefe],center=true);
 
}
 
}
 +
 +
  
 
module add_slash () {
 
module add_slash () {
translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
 
}
 
}
  
 
module add_x () {
 
module add_x () {
translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
+
translate([0,0,-kante/2+kerbe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
 
}
 
}
  
 
module add_ring () {
 
module add_ring () {
 
translate([0,0,r]) cylinder(tiefe,ringgroesse/2,ringgroesse/2,center=false);
 
translate([0,0,r]) cylinder(tiefe,ringgroesse/2,ringgroesse/2,center=false);
 +
}
 +
 +
module add_prisma (n=3) {
 +
  groesse =  strichlaenge / 2.3;
 +
translate([0,0,-kante/2+kerbe]) cylinder(tiefe,groesse,groesse,center=true,$fn=n);
 
}
 
}
  
Zeile 422: Zeile 453:
 
   if (ausschnittstyp == 1) color(kerbenfarbe) cut_quad ();  
 
   if (ausschnittstyp == 1) color(kerbenfarbe) cut_quad ();  
 
   if (ausschnittstyp == 2) color(kerbenfarbe) cut_circle ();  
 
   if (ausschnittstyp == 2) color(kerbenfarbe) cut_circle ();  
 +
  if (ausschnittstyp > 2) color(kerbenfarbe) cut_circle (n=ausschnittstyp);
 
}
 
}
 +
  
 
module cut_weiche(variant) {
 
module cut_weiche(variant) {
Zeile 452: Zeile 485:
 
  if (variant == 26) make_ausschnitt();  
 
  if (variant == 26) make_ausschnitt();  
 
  if (variant == 27) make_ausschnitt();  
 
  if (variant == 27) make_ausschnitt();  
 +
if (variant == 28) cut_circle (n=3);
 +
if (variant == 29) cut_circle (n=5);
 
  if (variant == 30) cut_x ();  
 
  if (variant == 30) cut_x ();  
 
  if (variant == 31) make_ausschnitt();  
 
  if (variant == 31) make_ausschnitt();  
Zeile 457: Zeile 492:
 
  if (variant == 33) cut_star ();  
 
  if (variant == 33) cut_star ();  
 
  if (variant == 34) make_ausschnitt();   
 
  if (variant == 34) make_ausschnitt();   
 +
if (variant == 35) cut_circle (n=6);
 +
if (variant == 36) cut_circle (n=7);
 +
if (variant == 37) cut_circle (n=8);
 +
if (variant == 38) make_ausschnitt(); 
 +
if (variant == 39) make_ausschnitt(); 
 +
if (variant == 40) make_ausschnitt(); 
 +
if (variant == 41) make_ausschnitt(); 
 +
if (variant == 42) make_ausschnitt(); 
 
}
 
}
  
Zeile 488: Zeile 531:
  
 
module add_weiche(variant=0) {
 
module add_weiche(variant=0) {
  if (variant == 1) add_pips1 (); // 1 kegliger Punkt
+
  if (variant == 1) add_pips1 (); // 1 keglige Punkt
  if (variant == 2) add_pips2 (); // 2 kegliger Punkte
+
  if (variant == 2) add_pips2 (); // 2 keglige Punkte
  if (variant == 3) add_pips3 (); // 3 kegliger Punkt
+
  if (variant == 3) add_pips3 (); // 3 keglige Punkt
  if (variant == 4) add_pips4 (); // 4 kegliger Punkte
+
  if (variant == 4) add_pips4 (); // 4 keglige Punkte
  if (variant == 5) add_pips5 (); // 5 kegliger Punkte
+
  if (variant == 5) add_pips5 (); // 5 keglige Punkte
  if (variant == 6) add_pips6 (); // 6 kegliger Punkte
+
  if (variant == 6) add_pips6 (); // 6 keglige Punkte
 
  if (variant == 7) add_strich (); // Taktiler Strich
 
  if (variant == 7) add_strich (); // Taktiler Strich
 
  if (variant == 8) add_plus (); // Taktiler Plus
 
  if (variant == 8) add_plus (); // Taktiler Plus
 
  if (variant == 9) add_slash (); // Taktiler Schrägstrich
 
  if (variant == 9) add_slash (); // Taktiler Schrägstrich
 
  if (variant == 21) add_sphere1 (); // 1 kugliger Punkt  
 
  if (variant == 21) add_sphere1 (); // 1 kugliger Punkt  
  if (variant == 22) add_sphere2 (); // 2 kugliger Punkte  
+
  if (variant == 22) add_sphere2 (); // 2 kuglige Punkte  
  if (variant == 23) add_sphere3 (); // 3 kugliger Punkte  
+
  if (variant == 23) add_sphere3 (); // 3 kuglige Punkte  
  if (variant == 24) add_sphere4 (); // 4 kugliger Punkte  
+
  if (variant == 24) add_sphere4 (); // 4 kuglige Punkte  
  if (variant == 25) add_sphere5 (); // 5 kugliger Punkte  
+
  if (variant == 25) add_sphere5 (); // 5 kuglige Punkte  
  if (variant == 26) add_sphere6 (); // 6 kugliger Punkte  
+
  if (variant == 26) add_sphere6 (); // 6 kuglige Punkte  
 
  if (variant == 27) add_quad (); // Taktiles Quadrat
 
  if (variant == 27) add_quad (); // Taktiles Quadrat
 
  if (variant == 31) add_x (); // Taktiles X
 
  if (variant == 31) add_x (); // Taktiles X
 
  if (variant == 32) add_ring (); // Taktiler Ring
 
  if (variant == 32) add_ring (); // Taktiler Ring
 
  if (variant == 34) add_star (); // Taktiler Stern
 
  if (variant == 34) add_star (); // Taktiler Stern
 +
if (variant == 38) add_prisma (n=3); // Taktiles Dreieck
 +
if (variant == 39) add_prisma (n=5); // Taktiles Fünfeck
 +
if (variant == 40) add_prisma (n=6); // Taktiles Sechseck
 +
if (variant == 41) add_prisma (n=7); // Taktiles Siebeneck
 +
if (variant == 42) add_prisma (n=8); // Taktiles Achteck
 
}
 
}
  

Aktuelle Version vom 6. November 2014, 13:44 Uhr

Mal ein flexibleres Angebot. Dürfte sich selbst erklären. Voreingestellt ist ein Teil, bei dem man sieht, was so ungefähr geht und kein sinnvoller Würfel. Alle bisher diskutierten Würfel mit Ausnahme der Farbwürfel lassen sich so realisieren. Auch der Würfel aus V1 ist noch möglich. Leider noch nichts testgedruckt. Mir fehlt hier noch die Möglichkeit. Kommentare sind willkommen. Ein Kubator-Modul für den Gesellschaftsspiel-Replikator könnte die Zahlen am Anfang einstellen. Das dürfte programmtechnisch nicht allzu aufwendig sein.

Neuerungen Version 1.12

  • Bugfixes
  • Neue Seitenvorschläge (Dreieck, Fünfeck, Sechseck, Siebeneck, Achteck)
  • Neue Ausschnittsmöglichkeiten (Dreieck, Fünfeck, Sechseck, Siebeneck, Achteck)

// Kubator 1.12
// Würfel massiv drucken, um möglichst faire Würfel zu erhalten!  

// Individuelle Einstellungen (die Zahlen können verändert werden, um den Würfel individuellen Wünschen anzupassen)

kante=20;    // Kantenlänge des Würfels (in mm)
             // typisch sind 20 mm oder 25 mm

// mögliches Aussehen der Seiten
// 0 glatte Seite
// 1 1 kegliger Punkt 
// 2 2 keglige Punkte 
// 3 3 keglige Punkte 
// 4 4 keglige Punkte 
// 5 5 keglige Punkte 
// 6 6 keglige Punkte 
// 7 taktiler Strich 
// 8 taktiles Plus 
// 9 taktiler Schrägstrich 
// 10 Quadratischer Ausschnitt
// 11 1 Auge
// 12 2 Augen
// 13 3 Augen
// 14 4 Augen
// 15 5 Augen
// 16 6 Augen
// 17 Ausgeschnittener Strich
// 18 Ausgeschnittenes Plus-Zeichen
// 19 Ausgeschnittener Schrägstrich
// 20 Kreisförmiger Ausschnitt
// 21 1 kugliger Punkt 
// 22 2 kuglige Punkte 
// 23 3 kuglige Punkte 
// 24 4 kuglige Punkte 
// 25 5 kuglige Punkte 
// 26 6 kuglige Punkte 
// 27 taktiles Quadrat
// 28 Dreieckiger Ausschnitt
// 29 Fünfeckiger Ausschnitt
// 30 ausgeschnittenes X
// 31 taktiles X 
// 32 taktiler Kreis
// 33 ausgeschnittener Stern
// 34 taktiler Stern 
// 35 Sechseckiger Ausschnitt
// 36 Siebeneckiger Ausschnitt
// 37 Achteckiger Ausschnitt
// 38 Taktiles Dreieck
// 39 Taktiler Fünfeck
// 40 Taktiles Sechseck
// 41 Taktiles Siebeneck
// 42 Taktiles Achteck

// hier die Nummern der gewünschten Seiten eintragen
seite_unten = 16;  
seite_oben = 17; 
seite_links = 31;  
seite_rechts = 6; 
seite_vorne = 0;  
seite_hinten = 26; 

abgerundet = 1; // Aussehen des Würfelkörpers
                // Werte ganzahlig von 0 bis 4
                // 0 = keine Abrundung der Ecken und Kanten
                // 1 = Ecken und Kanten sind abgerundet
                // 2 = nur Ecken sind abgerundet
                // 3 = Ecken und Kanten fehlen
                // 4 = Ecken fehlen, Kanten sind abgerundet

abrundungsgroesse = 0.7;  // je kleiner desto runder (0.55 <= abrundungsgroesse <= 1.0)

koerperfarbe = "white"; // Farbe des Würfelkörper
kerbenfarbe = "white"; // Farbe der Ausschnitte 
augenfarbe = "black"; // Farbe der Augen
punktfarbe = "black"; // Farbe der taktilen Punkte

ausschnittstyp = 1; // 1 = quadratischer Ausschnitt
                    // 2 = kreisförmiger Ausschnitt
                    // n (n > 2) = n-eckiger Ausschnitt

kerbe = 2; // Tiefe der ausgeschnittenen Bereiche (in mm)
ausschnitt = 13; // Seitenlänge der ausgeschnittenen Bereiche bei quadratischem Ausschnitt(in mm)
kreisdurchmesser = 7.5; // Durchmesser des Kreises bei kreisförmigem Ausschnitt (in mm)

abstand_kegelpunkte=4; // Abstand der erhabenen kegligen Punkte (in mm)
basis_kegelpunkte=1.5; // Basisdurchmesser der erhabenen kegligen Punkte (in mm)
kegelspitze=1; // Spitzheit der erhabenen kegligen Punkte (in mm)
                 // 0 = Kegel, 
                 // > 0 Kegelstumpf
                 // Zylinder, wenn gleicher Wert wie basis_kegelpunkte

abstand_kugelpunkte=4; // Abstand der kugligen Punkte (in mm
basis_kugelpunkte=1; // Basisdurchmesser der erhabenen kugligen Punkte (in mm)
// wird auf kerbe gesetzt, wenn er kleiner als diese Tiefe

augenabstand=4.5;		// Abstand der Augen von der Mitte der Seiten (in mm) bei Seiten 11 bis 16
d_auge=3.5;			// Durchmesser der Augen (in mm) bei Seiten 11 bis 16

strichdicke = 2.5; // Dicke des Striches bei Seiten 7 - 9,17 - 19, 30, 31, 33, 34
strichlaenge = 11; // Länge des Striches bei Seiten 7 - 9,17 - 19, 30, 31, 33, 34
ringgroesse = 10; // Durchmesser des inneren Kreises bei Seite 32 (in mm)
quadgroesse = 8; // Seitenlänge des inneren Quadrates bei Seite 27 (in mm)

//$fn = 70;	  // 	je größer desto genauer der Würfel
                   // 	je größer desto langsamer die Berechnung
                   // für Testzwecke auskommentieren 

// Kopierbereich (hier fertige Vorlagen hineinkopieren)



// Ende Kopierbereich


// Ende der individuellen Einstellungen
// ab hier nichts verändern

r=-kante/2;
r2=(d_auge/2);
tiefe = kerbe * 2;
punktpos=kante/2-kerbe;


main();

module body_intersection (body_intersection_size) {
		difference () {
      intersection() {
	    		color(koerperfarbe) cube(size=kante,center=true);
			    color(koerperfarbe) sphere(r=kante*body_intersection_size, center=true);
      }
  		color(augenfarbe) CutDice();
		}
}

module body_union_ecken(kante_kl,eckradius) {
      halbe_kante = kante_kl /2;
      for(r = [0:90:270])
         rotate([0,r,0])
            for(y = [halbe_kante,-halbe_kante])
               translate([halbe_kante,y,halbe_kante])
                  sphere(eckradius,center=true);
}

module body_union_kanten(kante_kl, eckradius) {
      halbe_kante = kante_kl /2;
      for(r = [0:90:270])
         rotate([0,r,0])
            for(y = [halbe_kante,-halbe_kante])
               translate([halbe_kante,y,0])
                  cylinder(kante_kl,eckradius,eckradius,center=true); 
      for(r = [0:90:270])
         rotate([0,r,0])
            translate([halbe_kante,0,halbe_kante]) 
             rotate([90,0,0])
               cylinder(kante_kl,eckradius,eckradius,center=true); 
}

module body_union_seiten(kante_kl, eckradius) {
      for(r = [0:90:270])
         rotate([0,r,0])
            translate([eckradius,0,0])
               cube([kante_kl,kante_kl,kante_kl],center=true); 
      for(y = [eckradius,-eckradius])
         translate([0,y,0])
            cube([kante_kl,kante_kl,kante_kl],center=true); 
}


module body_union(body_union_size) 

{
   kante_kl = kante * body_union_size;
   eckradius = (kante - kante_kl) / 2;
   difference () {
   union()
   {
      body_union_ecken(kante_kl,eckradius);
      body_union_kanten(kante_kl,eckradius);
      body_union_seiten(kante_kl,eckradius);
   }
  		color(augenfarbe) CutDice();
		}
}

module body_union_ohne_ecken(body_union_size) 

{
   kante_kl = kante * body_union_size;
   eckradius = (kante - kante_kl) / 2;
   difference () {
   union()
   {
      body_union_kanten(kante_kl,eckradius);
      body_union_seiten(kante_kl,eckradius);
   }
  		color(augenfarbe) CutDice();
		}
}

module body_union_ohne_ecken_und_kanten(body_union_size) 

{
   kante_kl = kante * body_union_size;
   eckradius = (kante - kante_kl) / 2;
   difference () {
   union()
   {
      body_union_seiten(kante_kl,eckradius);
   }
  		color(augenfarbe) CutDice();
		}
}

module main() {
    if (abgerundet == 0) body_intersection (1.0);
    if (abgerundet == 1) body_union (abrundungsgroesse);
    if (abgerundet == 2) body_intersection (abrundungsgroesse);
    if (abgerundet == 3) body_union_ohne_ecken_und_kanten (abrundungsgroesse);
    if (abgerundet == 4) body_union_ohne_ecken (abrundungsgroesse);

  color(punktfarbe) AddPoints();
}

module cut_quad () {
translate ([0,0,-kante/2]) cube([ausschnitt, ausschnitt, tiefe],center=true);
}

module cut_circle (n=0) {
if (n == 0) {
translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true);
}
if (n > 0) {
translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true, $fn=n);
}

}

module cut_strich () {
translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module cut_slash () {
translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module cut_star () {
translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate ([0,0,-kante/2]) cube([strichdicke, strichlaenge, tiefe],center=true);
translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate ([0,0,-kante/2]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module cut_x () {
translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate ([0,0,-kante/2]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module cut_plus () {
translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate ([0,0,-kante/2]) cube([strichdicke, strichlaenge, tiefe],center=true);
}


module cut_pips1 () {
	translate([0,0,r])	sphere(r=r2*1.4, center=true);
}

module cut_pips2 () {
		translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
}

module cut_pips3 () {
		translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([0,0,r])	sphere(r=r2, center=true);
		translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
}

module cut_pips4 () {
		translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
		translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
}

module cut_pips5 () {
		translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
		translate([0,0,r])	sphere(r=r2, center=true);
		translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
}

module cut_pips6 () {
		translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
		translate([-augenabstand,0,r]) sphere(r=r2, center=true);
		translate([augenabstand,0,r]) sphere(r=r2, center=true);
		translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
		translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
}

module add_strich () {
translate ([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module add_star () {
translate([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-kante/2+kerbe]) cube([strichdicke, strichlaenge, tiefe],center=true);
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-kante/2+kerbe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module add_plus () {
translate([0,0,-kante/2+kerbe]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-kante/2+kerbe]) cube([strichdicke, strichlaenge, tiefe],center=true);
}



module add_slash () {
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module add_x () {
translate([0,0,-kante/2+kerbe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
translate([0,0,-kante/2+kerbe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
}

module add_ring () {
	translate([0,0,r])	cylinder(tiefe,ringgroesse/2,ringgroesse/2,center=false);
}

module add_prisma (n=3) {
  groesse =  strichlaenge / 2.3;
	translate([0,0,-kante/2+kerbe])	cylinder(tiefe,groesse,groesse,center=true,$fn=n);
}

module add_quad () {
  translate([0,0,-tiefe]) cube([quadgroesse, quadgroesse, 3*tiefe],center=true);
//	translate([0,0,r])	cube(tiefe,35,35,center=true);
}

module add_sphere1 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);

	translate([0,0,r+hoehe])	sphere(r=radius, center=true);
 }

module add_sphere2 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
	translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
 }

module add_sphere3 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
		translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([0,0,r+hoehe])	sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
 }
module add_sphere4 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);

		translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);

 }
module add_sphere5 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
		translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([0,0,r+hoehe])	sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
 }
module add_sphere6 () {
  hoehe = kerbe;
  rho = min (basis_kugelpunkte / 2, hoehe);
  radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
		translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([-abstand_kugelpunkte,0,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,0,r+hoehe]) sphere(r=radius, center=true);
		translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
		translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
 }


module add_pips1 () {
	translate([0,0,r])	cylinder(tiefe,kegelspitze,basis_kegelpunkte);
 }

module add_pips2 () {
		translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);  
}

module add_pips3 () {
		translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([0,0,r])	cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
}

module add_pips4 () {
		translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
}

module add_pips5 () {
		translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([0,0,r])	cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
}

module add_pips6 () {
		translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([-abstand_kegelpunkte,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
		translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
}

module make_ausschnitt () {
  if (ausschnittstyp == 1) color(kerbenfarbe) cut_quad (); 
  if (ausschnittstyp == 2) color(kerbenfarbe) cut_circle (); 
  if (ausschnittstyp > 2) color(kerbenfarbe) cut_circle (n=ausschnittstyp); 
}


module cut_weiche(variant) {
 if (variant == 1) make_ausschnitt(); 
 if (variant == 2) make_ausschnitt();  
 if (variant == 3) make_ausschnitt();  
 if (variant == 4) make_ausschnitt();  
 if (variant == 5) make_ausschnitt();  
 if (variant == 6) make_ausschnitt();  
 if (variant == 7) make_ausschnitt();  
 if (variant == 8) make_ausschnitt();  
 if (variant == 9) make_ausschnitt();  
 if (variant == 10) cut_quad (); 
 if (variant == 11) cut_pips1 (); // 1 Auge
 if (variant == 12) cut_pips2 (); // 2 Augen
 if (variant == 13) cut_pips3 (); // 3 Augen
 if (variant == 14) cut_pips4 (); // 4 Augen
 if (variant == 15) cut_pips5 (); // 5 Augen
 if (variant == 16) cut_pips6 (); // 6 Augen
 if (variant == 17) cut_strich (); 
 if (variant == 18) cut_plus (); 
 if (variant == 19) cut_slash (); 
 if (variant == 20) cut_circle (); 
 if (variant == 21) make_ausschnitt(); 
 if (variant == 22) make_ausschnitt(); 
 if (variant == 23) make_ausschnitt(); 
 if (variant == 24) make_ausschnitt(); 
 if (variant == 25) make_ausschnitt(); 
 if (variant == 26) make_ausschnitt(); 
 if (variant == 27) make_ausschnitt(); 
 if (variant == 28) cut_circle (n=3); 
 if (variant == 29) cut_circle (n=5); 
 if (variant == 30) cut_x (); 
 if (variant == 31) make_ausschnitt(); 
 if (variant == 32) make_ausschnitt(); 
 if (variant == 33) cut_star (); 
 if (variant == 34) make_ausschnitt();  
 if (variant == 35) cut_circle (n=6); 
 if (variant == 36) cut_circle (n=7); 
 if (variant == 37) cut_circle (n=8); 
 if (variant == 38) make_ausschnitt();  
 if (variant == 39) make_ausschnitt();  
 if (variant == 40) make_ausschnitt();  
 if (variant == 41) make_ausschnitt();  
 if (variant == 42) make_ausschnitt();  
}

module cut_unten() {
  cut_weiche(seite_unten);
}

module cut_hinten() {
	rotate([90,0,0]) {
  cut_weiche(seite_hinten);
	}
}

module cut_links() {
	rotate([0,90,0]) {
  cut_weiche(seite_links);
	}
}

module cut_rechts() {
	rotate([0,-90,0]) {
  cut_weiche(seite_rechts);
	}
}

module cut_vorne() {
	rotate([-90,0,0]) {
  cut_weiche(seite_vorne);
	}
}

module add_weiche(variant=0) {
 if (variant == 1) add_pips1 (); // 1 keglige Punkt
 if (variant == 2) add_pips2 (); // 2 keglige Punkte
 if (variant == 3) add_pips3 (); // 3 keglige Punkt
 if (variant == 4) add_pips4 (); // 4 keglige Punkte
 if (variant == 5) add_pips5 (); // 5 keglige Punkte
 if (variant == 6) add_pips6 (); // 6 keglige Punkte
 if (variant == 7) add_strich (); // Taktiler Strich
 if (variant == 8) add_plus (); // Taktiler Plus
 if (variant == 9) add_slash (); // Taktiler Schrägstrich
 if (variant == 21) add_sphere1 (); // 1 kugliger Punkt 
 if (variant == 22) add_sphere2 (); // 2 kuglige Punkte 
 if (variant == 23) add_sphere3 (); // 3 kuglige Punkte 
 if (variant == 24) add_sphere4 (); // 4 kuglige Punkte 
 if (variant == 25) add_sphere5 (); // 5 kuglige Punkte 
 if (variant == 26) add_sphere6 (); // 6 kuglige Punkte 
 if (variant == 27) add_quad (); // Taktiles Quadrat
 if (variant == 31) add_x (); // Taktiles X
 if (variant == 32) add_ring (); // Taktiler Ring
 if (variant == 34) add_star (); // Taktiler Stern
 if (variant == 38) add_prisma (n=3); // Taktiles Dreieck
 if (variant == 39) add_prisma (n=5); // Taktiles Fünfeck
 if (variant == 40) add_prisma (n=6); // Taktiles Sechseck
 if (variant == 41) add_prisma (n=7); // Taktiles Siebeneck
 if (variant == 42) add_prisma (n=8); // Taktiles Achteck
}

module cut_oben() {
	rotate([180,0,0]) {
  cut_weiche(seite_oben);
	}
}

module CutDice(){
	cut_unten();
	cut_hinten();
	cut_links();
	cut_rechts();
	cut_vorne();
	cut_oben();
	}

module add_unten() {
  add_weiche(seite_unten);
}

module add_hinten() {
	rotate([90,0,0]) {
  add_weiche(seite_hinten);
	}
}

module add_links() {
	rotate([0,90,0]) {
  add_weiche(seite_links);
	}
}

module add_rechts() {
	rotate([0,-90,0]) {
  add_weiche(seite_rechts);
	}
}

module add_vorne() {
	rotate([-90,0,0]) {
  add_weiche(seite_vorne);
	}
}

module add_oben() {
	rotate([180,0,0]) {
  add_weiche(seite_oben);
	}
}

module AddPoints(){
	add_unten();
	add_hinten();
	add_links();
	add_rechts();
	add_vorne();
	add_oben();
}