Die Datei cylinder_form.scad:
/*
CC0 BY (Public Domain)
by bernhard (3d.bit-field.de) is licensed under the Creative Commons - Attribution license.
*/
durchmesser = 35;
wand = 4;
hoehe = 30;
ring_h = 3;
ring_w = durchmesser + 5;
$fn = $preview?24:96;
eps = 0.1;
difference()
{
union()
{
cylinder(d=durchmesser, h= hoehe);
cylinder(d = ring_w, h=ring_h);
}
cylinder(d = durchmesser - 2*wand, h=hoehe + eps);
}
Die Datei heart_form.scad:
// $Revision: 1024 $
// $Id: heart_form.scad 1024 2026-01-01 13:28:38Z bernhard $
// $Author: bernhard $
// $Date: 2026-01-01 14:28:38 +0100 (Do, 01. Jan 2026) $
// $LastChangedDate: 2026-01-01 14:28:38 +0100 (Do, 01. Jan 2026) $
/*
CC0 BY (Public Domain)
2025 by bernhard (3d.bit-field.de) is licensed under the Creative Commons - Attribution license.
*/
use <BOSL2/std.scad>
//use <BOSL2/rounding.scad>
$fn = $preview ? 32 : 96 ;
//
eps = 0.1;
// Seitenlänge Quadrat (Herz unten und HalbkreisDurchmesser)
s = 26;
// Höhe
hh = 30;
// Höhe Rand
hh_rand = 4;
// Wandstärke
wall = 4;
module heart_2d()
{
square(s);
translate([s,s/2]) circle(d=s);
translate([s/2,s]) circle(d=s);
}
module heart_2d_line_back(wall=wall, hh=hh)
{
linear_extrude(height=hh) {
difference()
{
offset(wall) heart_2d();
heart_2d();
}
}
}
module heart_2d_line(wall=wall, hh=hh)
{
difference()
{
linear_extrude(height=hh)
offset(1.5*wall) heart_2d();
down(1) linear_extrude(height=hh + 1 + 2*eps)
heart_2d();
}
}
module cutter()
{
rotate([0,0,45])
{
difference()
{
convex_offset_extrude(height=hh_rand, top=os_circle(r=1), bottom=os_circle(r=1) )
offset(2*wall) heart_2d();
down(1) linear_extrude(height=hh + 1 + 2*eps)
heart_2d();
}
heart_2d_line(wall=wall/2);
}
}
cutter();
Titelbildquelle: eigenes Bild
... because software matters