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.
4 // Würfel massiv drucken, um möglichst faire Würfel zu erhalten!
6 // Individuelle Einstellungen (die Zahlen können verändert werden, um den Würfel individuellen Wünschen anzupassen)
8 kante=20; // Kantenlänge des Würfels (in mm)
9 // typisch sind 20 mm oder 25 mm
11 // mögliches Aussehen der Seiten
21 // 9 taktiler Schrägstrich
22 // 10 Quadratischer Ausschnitt
29 // 17 Ausgeschnittener Strich
30 // 18 Ausgeschnittenes Plus-Zeichen
31 // 19 Ausgeschnittener Schrägstrich
32 // 20 Kreisförmiger Ausschnitt
33 // 21 1 kugliger Punkt
34 // 22 2 kuglige Punkte
35 // 23 3 kuglige Punkte
36 // 24 4 kuglige Punkte
37 // 25 5 kuglige Punkte
38 // 26 6 kuglige Punkte
39 // 27 taktiles Quadrat
40 // 30 ausgeschnittenes X
43 // 33 ausgeschnittener Stern
46 // hier die Nummern der gewünschten Seiten eintragen
54 abgerundet = 2; // Aussehen des Würfelkörpers
55 // Werte ganzahlig von 0 bis 4
56 // 0 = keine Abrundung der Ecken und Kanten
57 // 1 = Ecken und Kanten sind abgerundet
58 // 2 = nur Ecken sind abgerundet
59 // 3 = Ecken und Kanten fehlen
60 // 4 = Ecken fehlen, Kanten sind abgerundet
62 abrundungsgroesse = 0.7; // je kleiner desto runder (0.55 <= abrundungsgroesse <= 1.0)
64 koerperfarbe = "black"; // Farbe des Würfelkörper
65 kerbenfarbe = "black"; // Farbe der Ausschnitte
66 augenfarbe = "yellow"; // Farbe der Augen
67 punktfarbe = "white"; // Farbe der taktilen Punkte
69 ausschnittstyp = 1; // 1 = quadratischer Ausschnitt
70 // 2 = kreisförmiger Ausschnitt
72 tiefe_ausschnitt = 2; // Tiefe der ausgeschnittenen Bereiche (in mm)
73 ausschnitt = 13; // Seitenlänge der ausgeschnittenen Bereiche bei quadratischem Ausschnitt(in mm)
74 kreisdurchmesser = 7.5; // Durchmesser des Kreises bei kreisförmigem Ausschnitt (in mm)
76 abstand_kegelpunkte=4; // Abstand der erhabenen kegligen und kugligen Punkte (in mm)
77 basis_kegelpunkte=1.5; // Basisdurchmesser der erhabenen kegligen Punkte (in mm)
78 kegelspitze=1; // Spitzheit der erhabenen kegligen Punkte (in mm)
81 // Zylinder, wenn gleicher Wert wie basis_kegelpunkte
83 abstand_kugelpunkte=4; // Abstand der kugligen Punkte (in mm
84 basis_kugelpunkte=1; // Basisdurchmesser der erhabenen kugligen Punkte (in mm)
85 // wird auf tiefe_ausschnitt gesetzt, wenn er kleiner als diese Tiefe
87 augenabstand=4.5; // Abstand der Augen von der Mitte der Seiten (in mm) bei Seiten 11 bis 16
88 d_auge=3.5; // Durchmesser der Augen (in mm) bei Seiten 11 bis 16
90 strichdicke = 2.5; // Dicke des Striches bei Seiten 7 - 9,17 - 19, 30, 31, 33, 34
91 strichlaenge = 11; // Länge des Striches bei Seiten 7 - 9,17 - 19, 30, 31, 33, 34
92 ringgroesse = 10; // Durchmesser des inneren Kreises bei Seite 32 (in mm)
93 quadgroesse = 8; // Seitenlänge des inneren Quadrates bei Seite 27 (in mm)
95 aufloesung = 60; // je größer desto genauer der Würfel
96 // je größer desto langsamer die Berechnung
97 // für Testzwecke auskommentieren
99 // Kopierbereich (hier können fertige Vorlagen hineinkopiert werden)
102 // Ende Kopierbereich
105 // Ende der individuellen Einstellungen
106 // ab hier nichts verändern
108 kerbe = tiefe_ausschnitt;
112 punktpos=kante/2-kerbe;
117 module body_intersection (body_intersection_size) {
120 color(koerperfarbe) cube(size=kante,center=true);
121 color(koerperfarbe) sphere(r=kante*body_intersection_size, center=true);
123 color(augenfarbe) CutDice();
127 module body_union_ecken(kante_kl,eckradius) {
128 halbe_kante = kante_kl /2;
131 for(y = [halbe_kante,-halbe_kante])
132 translate([halbe_kante,y,halbe_kante])
133 sphere(eckradius,center=true);
136 module body_union_kanten(kante_kl, eckradius) {
137 halbe_kante = kante_kl /2;
140 for(y = [halbe_kante,-halbe_kante])
141 translate([halbe_kante,y,0])
142 cylinder(kante_kl,eckradius,eckradius,center=true);
145 translate([halbe_kante,0,halbe_kante])
147 cylinder(kante_kl,eckradius,eckradius,center=true);
150 module body_union_seiten(kante_kl, eckradius) {
153 translate([eckradius,0,0])
154 cube([kante_kl,kante_kl,kante_kl],center=true);
155 for(y = [eckradius,-eckradius])
157 cube([kante_kl,kante_kl,kante_kl],center=true);
161 module body_union(body_union_size)
164 kante_kl = kante * body_union_size;
165 eckradius = (kante - kante_kl) / 2;
169 body_union_ecken(kante_kl,eckradius);
170 body_union_kanten(kante_kl,eckradius);
171 body_union_seiten(kante_kl,eckradius);
173 color(augenfarbe) CutDice();
177 module body_union_ohne_ecken(body_union_size)
180 kante_kl = kante * body_union_size;
181 eckradius = (kante - kante_kl) / 2;
185 body_union_kanten(kante_kl,eckradius);
186 body_union_seiten(kante_kl,eckradius);
188 color(augenfarbe) CutDice();
192 module body_union_ohne_ecken_und_kanten(body_union_size)
195 kante_kl = kante * body_union_size;
196 eckradius = (kante - kante_kl) / 2;
200 body_union_seiten(kante_kl,eckradius);
202 color(augenfarbe) CutDice();
207 if (abgerundet == 0) body_intersection (1.0);
208 if (abgerundet == 1) body_union (abrundungsgroesse);
209 if (abgerundet == 2) body_intersection (abrundungsgroesse);
210 if (abgerundet == 3) body_union_ohne_ecken_und_kanten (abrundungsgroesse);
211 if (abgerundet == 4) body_union_ohne_ecken (abrundungsgroesse);
213 color(punktfarbe) AddPoints();
217 translate ([0,0,-kante/2]) cube([ausschnitt, ausschnitt, tiefe],center=true);
220 module cut_circle () {
221 translate ([0,0,-kante/2]) cylinder(tiefe,kreisdurchmesser,kreisdurchmesser, center=true);
224 module cut_strich () {
225 translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
228 module cut_slash () {
229 translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
233 translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
234 translate ([0,0,-kante/2]) cube([strichdicke, strichlaenge, tiefe],center=true);
235 translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
236 translate ([0,0,-kante/2]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
240 translate ([0,0,-kante/2]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, tiefe],center=true);
241 translate ([0,0,-kante/2]) rotate([0,0,45]) cube([strichlaenge, strichdicke, tiefe],center=true);
245 translate ([0,0,-kante/2]) cube([strichlaenge, strichdicke, tiefe],center=true);
246 translate ([0,0,-kante/2]) cube([strichdicke, strichlaenge, tiefe],center=true);
250 module cut_pips1 () {
251 translate([0,0,r]) sphere(r=r2*1.4, center=true);
254 module cut_pips2 () {
255 translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
256 translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
259 module cut_pips3 () {
260 translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
261 translate([0,0,r]) sphere(r=r2, center=true);
262 translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
265 module cut_pips4 () {
266 translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
267 translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
268 translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
269 translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
272 module cut_pips5 () {
273 translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
274 translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
275 translate([0,0,r]) sphere(r=r2, center=true);
276 translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
277 translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
280 module cut_pips6 () {
281 translate([-augenabstand,augenabstand,r]) sphere(r=r2, center=true);
282 translate([augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
283 translate([-augenabstand,0,r]) sphere(r=r2, center=true);
284 translate([augenabstand,0,r]) sphere(r=r2, center=true);
285 translate([augenabstand,augenabstand,r]) sphere(r=r2, center=true);
286 translate([-augenabstand,-augenabstand,r]) sphere(r=r2, center=true);
289 module add_strich () {
290 translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
294 translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
295 translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*tiefe],center=true);
296 translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
297 translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
302 translate([0,0,-tiefe]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
303 translate([0,0,-tiefe]) cube([strichdicke, strichlaenge, 3*kerbe],center=true);
306 module add_slash () {
307 translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
311 translate([0,0,-tiefe]) rotate([0,0,-45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
312 translate([0,0,-tiefe]) rotate([0,0,45]) cube([strichlaenge, strichdicke, 3*tiefe],center=true);
316 translate([0,0,r]) cylinder(tiefe,ringgroesse/2,ringgroesse/2,center=false);
320 translate([0,0,-tiefe]) cube([quadgroesse, quadgroesse, 3*tiefe],center=true);
321 // translate([0,0,r]) cube(tiefe,35,35,center=true);
324 module add_sphere1 () {
326 rho = min (basis_kugelpunkte / 2, hoehe);
327 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
329 translate([0,0,r+hoehe]) sphere(r=radius, center=true);
332 module add_sphere2 () {
334 rho = min (basis_kugelpunkte / 2, hoehe);
335 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
336 translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
337 translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
340 module add_sphere3 () {
342 rho = min (basis_kugelpunkte / 2, hoehe);
343 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
344 translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
345 translate([0,0,r+hoehe]) sphere(r=radius, center=true);
346 translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
348 module add_sphere4 () {
350 rho = min (basis_kugelpunkte / 2, hoehe);
351 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
353 translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
354 translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
355 translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
356 translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
359 module add_sphere5 () {
361 rho = min (basis_kugelpunkte / 2, hoehe);
362 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
363 translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
364 translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
365 translate([0,0,r+hoehe]) sphere(r=radius, center=true);
366 translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
367 translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
369 module add_sphere6 () {
371 rho = min (basis_kugelpunkte / 2, hoehe);
372 radius = max((pow(hoehe,2) + pow(rho,2)) / (2 * hoehe),hoehe);
373 translate([-abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
374 translate([abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
375 translate([-abstand_kugelpunkte,0,r+hoehe]) sphere(r=radius, center=true);
376 translate([abstand_kugelpunkte,0,r+hoehe]) sphere(r=radius, center=true);
377 translate([abstand_kugelpunkte,abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
378 translate([-abstand_kugelpunkte,-abstand_kugelpunkte,r+hoehe]) sphere(r=radius, center=true);
382 module add_pips1 () {
383 translate([0,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
386 module add_pips2 () {
387 translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
388 translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
391 module add_pips3 () {
392 translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
393 translate([0,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
394 translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
397 module add_pips4 () {
398 translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
399 translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
400 translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
401 translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
404 module add_pips5 () {
405 translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
406 translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
407 translate([0,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
408 translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
409 translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
412 module add_pips6 () {
413 translate([-abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
414 translate([abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
415 translate([-abstand_kegelpunkte,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
416 translate([abstand_kegelpunkte,0,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
417 translate([abstand_kegelpunkte,abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
418 translate([-abstand_kegelpunkte,-abstand_kegelpunkte,r]) cylinder(tiefe,kegelspitze,basis_kegelpunkte);
421 module make_ausschnitt () {
422 if (ausschnittstyp == 1) color(kerbenfarbe) cut_quad ();
423 if (ausschnittstyp == 2) color(kerbenfarbe) cut_circle ();
426 module cut_weiche(variant) {
427 if (variant == 1) make_ausschnitt();
428 if (variant == 2) make_ausschnitt();
429 if (variant == 3) make_ausschnitt();
430 if (variant == 4) make_ausschnitt();
431 if (variant == 5) make_ausschnitt();
432 if (variant == 6) make_ausschnitt();
433 if (variant == 7) make_ausschnitt();
434 if (variant == 8) make_ausschnitt();
435 if (variant == 9) make_ausschnitt();
436 if (variant == 10) cut_quad ();
437 if (variant == 11) cut_pips1 (); // 1 Auge
438 if (variant == 12) cut_pips2 (); // 2 Augen
439 if (variant == 13) cut_pips3 (); // 3 Augen
440 if (variant == 14) cut_pips4 (); // 4 Augen
441 if (variant == 15) cut_pips5 (); // 5 Augen
442 if (variant == 16) cut_pips6 (); // 6 Augen
443 if (variant == 17) cut_strich ();
444 if (variant == 18) cut_plus ();
445 if (variant == 19) cut_slash ();
446 if (variant == 20) cut_circle ();
447 if (variant == 21) make_ausschnitt();
448 if (variant == 22) make_ausschnitt();
449 if (variant == 23) make_ausschnitt();
450 if (variant == 24) make_ausschnitt();
451 if (variant == 25) make_ausschnitt();
452 if (variant == 26) make_ausschnitt();
453 if (variant == 27) make_ausschnitt();
454 if (variant == 30) cut_x ();
455 if (variant == 31) make_ausschnitt();
456 if (variant == 32) make_ausschnitt();
457 if (variant == 33) cut_star ();
458 if (variant == 34) make_ausschnitt();
462 cut_weiche(seite_unten);
465 module cut_hinten() {
467 cut_weiche(seite_hinten);
473 cut_weiche(seite_links);
477 module cut_rechts() {
479 cut_weiche(seite_rechts);
485 cut_weiche(seite_vorne);
489 module add_weiche(variant=0) {
490 if (variant == 1) add_pips1 (); // 1 kegliger Punkt
491 if (variant == 2) add_pips2 (); // 2 kegliger Punkte
492 if (variant == 3) add_pips3 (); // 3 kegliger Punkt
493 if (variant == 4) add_pips4 (); // 4 kegliger Punkte
494 if (variant == 5) add_pips5 (); // 5 kegliger Punkte
495 if (variant == 6) add_pips6 (); // 6 kegliger Punkte
496 if (variant == 7) add_strich (); // Taktiler Strich
497 if (variant == 8) add_plus (); // Taktiler Plus
498 if (variant == 9) add_slash (); // Taktiler Schrägstrich
499 if (variant == 21) add_sphere1 (); // 1 kugliger Punkt
500 if (variant == 22) add_sphere2 (); // 2 kugliger Punkte
501 if (variant == 23) add_sphere3 (); // 3 kugliger Punkte
502 if (variant == 24) add_sphere4 (); // 4 kugliger Punkte
503 if (variant == 25) add_sphere5 (); // 5 kugliger Punkte
504 if (variant == 26) add_sphere6 (); // 6 kugliger Punkte
505 if (variant == 27) add_quad (); // Taktiles Quadrat
506 if (variant == 31) add_x (); // Taktiles X
507 if (variant == 32) add_ring (); // Taktiler Ring
508 if (variant == 34) add_star (); // Taktiler Stern
513 cut_weiche(seite_oben);
527 add_weiche(seite_unten);
530 module add_hinten() {
532 add_weiche(seite_hinten);
538 add_weiche(seite_links);
542 module add_rechts() {
544 add_weiche(seite_rechts);
550 add_weiche(seite_vorne);
556 add_weiche(seite_oben);