Die Datei sterne.scad:
(Sie benutzt polyline2d aus der Library dotSCAD und mirror_copy aus der Library BOSL2.)
// $Author: bernhard $
// $Id: sterne.scad 1018 2025-11-28 14:02:47Z bernhard $
// $Date: 2025-11-28 15:02:47 +0100 (Fr, 28. Nov 2025) $
// (C) 2025 CC0 BY - bit-field.de
////////////////////////////////////////////////////
use <line2d.scad>
include <polyline2d.scad>
include <BOSL2/std.scad>
$fn = $preview ? 12 : 48;
eps = 0.1;
shrink = 1.075;
p1 = [[0,0], [8,4], [12, 2], [20,10], [38,0]];
off1 = 0.0;
w1 = 1.2;
p2 = [[0,0], [24, 10], [48,0], [0,0]];
off2 = 0.2;
w2 = 2;
p = p2;
w = w2;
off = off2;
/*
p = p1;
w = w1;
off = off1;
*/
module stern()
{
for(i=[0:45:360-45])
rotate([0, 0, i])
mirror_copy([0, 1, 0])
linear_extrude(1.5)
offset(off)
polyline2d(points=p, width=w, endingStyle="CAP_ROUND");
}
//minkowski()
{
difference()
{
color("red") stern();
if ( p == p2 ) {
translate([0, 0, -eps]) cylinder(d = 6. * shrink + 0.1 , h =2);
}
}
sphere(0.05);
}
Die Datei xmas_balls_1.scad:
(Diese Datei zeigt einen rekursiven Funktionsaufruf. Das ist hier nicht unbedingt nötig, aber als Beispiel für eine Rekursion, die einmal etwas anderes als Fakultät berechnet, doch sinnvoll.
Du kannst etwas mit gap und den anderen Parametern spielen. Die Voreinstellungen sind mit viel "Spiel" für das "print in place"-Drucken gestaltet. So kann man auch die einzelnen Ringe einfach rausdrücken. Wenn mann dann zwei oder mehr Exemplare mit jeweils einer anderen Farbe druckt und die Ringe austauscht, kann man auch ohne AMS. MMU oder derartige Zusatzeinrichtungen mehrfarbige Kugeln drucken.)
// $Revision: 1018 $
// $Id: xmas_balls_1.scad 1018 2025-11-28 14:02:47Z bernhard $
// $Author: bernhard $
// $Date: 2025-11-28 15:02:47 +0100 (Fr, 28. Nov 2025) $
(C) 2025 CCO BY - bit-field.de
#include <BOSL2/std.scad>
$fn = $preview ? 64 : 92;
i_d = 60;
wand = 5;
high = 8;
rund = 1.5;
gap = 1;
kugel_d = 5;
kugel_r = kugel_d / 2;
module ring(innen_d = i_d)
{
color(innen_d % 24 == 0 ? "red" : "yellow")
difference()
{
union()
{
tube(id = innen_d, wall = wand, h = high, rounding = rund ); // der Ring
back(innen_d/2 + wand) scale([1, 1.2, 1]) sphere(d=kugel_d); // die "Nasen"
fwd(innen_d/2 + wand) scale([1, 1.2, 1]) sphere(d=kugel_d);
}
back(innen_d/2 - 0*wand) sphere(d=kugel_d + gap); // Löcher für Nasen
fwd(innen_d/2 - 0*wand) sphere(d=kugel_d + gap);
}
render();
}
module aussen_ring() // Ring mit Öse zum Aufhängen
{
difference()
{
color("yellow")
union()
{
ring();
back(i_d/2 + wand + 2)
cuboid ([high, high , high], rounding = 1 );
}
back(i_d/2 + wand + 2)
left(0*high) yrot(90) cyl (r = kugel_r/2, h = 2*high, rounding = 1);
}
}
aussen_ring();
// Funktion f, die Innenradius des nächstkleineren Kreises berechnet
function f(x) = x - 1*wand - kugel_d -2 * gap ;
// Startwert
x_start = 48 * 1;
// Schleife, die rekursiv die Innendurchmesser berechnet und Ringe zeichnet
module generate_rings(x) {
echo(x = x);
if (x >= 10) { // Abbruchbedingung (z. B. wenn x (innendurchmesser) kleiner als 10 ist)
yrot($t*360*x)
ring(x); // Ring mit aktuellem x erzeugen
generate_rings(f(x)); // Rekursiver Aufruf mit neuem x
}
}
// Starte die Rekursion
generate_rings(x_start);
Die zugehörigen stl-Dateien findest du demnächst auf der Seite STL-Downloads – Weihnacht_25
Bis es soweit ist, einfach per mail anfordern!
Titelbildquelle: eigenes Bild
... because software matters