From a4f7ce9f357815e84aec9fb2a53b6ad10194f072 Mon Sep 17 00:00:00 2001
From: UW
+// 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 +// 30 ausgeschnittenes X +// 31 taktiles X +// 32 taktiler Kreis +// 33 ausgeschnittener Stern +// 34 taktiler Stern + +// 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 = 2; // 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 = "black"; // Farbe des Würfelkörper +kerbenfarbe = "black"; // Farbe der Ausschnitte +augenfarbe = "yellow"; // Farbe der Augen +punktfarbe = "white"; // Farbe der taktilen Punkte + +ausschnittstyp = 1; // 1 = quadratischer Ausschnitt + // 2 = kreisförmiger Ausschnitt + +tiefe_ausschnitt = 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 und kugligen 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 tiefe_ausschnitt 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) + +aufloesung = 60; // je gröÃer desto genauer der Würfel + // je gröÃer desto langsamer die Berechnung + // für Testzwecke auskommentieren + +// Kopierbereich (hier können fertige Vorlagen hineinkopiert werden) + + +// Ende Kopierbereich + + +// Ende der individuellen Einstellungen +// ab hier nichts verändern + +kerbe = tiefe_ausschnitt; +r=-kante/2; +r2=(d_auge/2); +tiefe = kerbe * 2; +punktpos=kante/2-kerbe; +$fn = aufloesung; + +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 () { +translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true); +} + +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,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +} + +module add_star () { +translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*tiefe],center=true); +translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +} + + +module add_plus () { +translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*kerbe],center=true); +} + +module add_slash () { +translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +} + +module add_x () { +translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true); +} + +module add_ring () { + translate([0,0,r]) cylinder(tiefe,ringgroesse/2,ringgroesse/2,center=false); +} + +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 (); +} + +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 == 30) cut_x (); + if (variant == 31) make_ausschnitt(); + if (variant == 32) make_ausschnitt(); + if (variant == 33) cut_star (); + if (variant == 34) 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 kegliger Punkt + if (variant == 2) add_pips2 (); // 2 kegliger Punkte + if (variant == 3) add_pips3 (); // 3 kegliger Punkt + if (variant == 4) add_pips4 (); // 4 kegliger Punkte + if (variant == 5) add_pips5 (); // 5 kegliger Punkte + if (variant == 6) add_pips6 (); // 6 kegliger 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 kugliger Punkte + if (variant == 23) add_sphere3 (); // 3 kugliger Punkte + if (variant == 24) add_sphere4 (); // 4 kugliger Punkte + if (variant == 25) add_sphere5 (); // 5 kugliger Punkte + if (variant == 26) add_sphere6 (); // 6 kugliger 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 +} + +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(); +} +-- 2.20.1