Gesellschaftsspiel-Replikator/W6 V1.1
// 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
seite_unten = 39; seite_oben = 38; seite_links = 40; seite_rechts = 41; seite_vorne = 42; seite_hinten = 9;
// 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(); }