Models / Snowflake ornament

Snowflake ornament

A six-armed snowflake ornament. Each arm is one branch, repeated.

The cut file as the downloads lay it out: 82.1 × 96.7 mm, 1 part on 1 sheet. Rendered by KerfScript 0.2.0 from the source below.

Source 50 lines

// A six-armed snowflake ornament. Each arm is one branch, repeated.
 
/* [Snowflake] */
// Width across the arms
size = 90; // [40:5:200]
// Side branches on each arm
branches = 3; // [1:1:5]
// Arm thickness
arm = 3.2; // [2:0.2:6]
// Angle of the side branches
spread = 52; // [30:1:70]
// Different seeds give different snowflakes
seed = 7; // [1:1:99]
 
/* [Hanging] */
loop = true;
// Hole diameter
hole = 3.5; // [2:0.5:6]
 
/* [Hidden] */
$fn = 48;
r = size / 2;
lengths = rands(0.35, 0.8, branches, seed);
spots = rands(0.25, 0.85, branches, seed + 1);
 
module bar(a, b, w) hull() {
  translate(a) circle(d = w);
  translate(b) circle(d = w);
}
 
module arm() {
  bar([0, 0], [r - arm, 0], arm);
  translate([r - arm * 1.6, 0]) rotate(45) rect(arm * 1.8, center = true);
  for (i = [0:branches - 1]) {
    x = r * spots[i];
    len = (r - x) * lengths[i];
    for (s = [-1, 1]) bar([x, 0], [x + len * cos(spread), s * len * sin(spread)], arm * 0.8);
  }
}
 
difference() {
  union() {
    for (k = [0:5]) rotate(90 + k * 60) arm();
    regular_polygon(6, r * 0.22);
    if (loop) translate([0, r - arm]) circle(d = hole + 2 * arm);
  }
  regular_polygon(6, r * 0.1);
  if (loop) translate([0, r - arm]) circle(d = hole);
}
engrave() rotate(30) for (k = [0:5]) rotate(k * 60) translate([r * 0.16, 0]) circle(d = r * 0.035);