I’ve previously posted about my 3D-printed stage jewelry: the 3D slugs , the diamond, the chain of office, and large pendants printed on my Monoprice Delta Mini printer using CC3D Silk Gold PLA filament.
I designed another pendant yesterday, and printed it today—this one using stars instead of spheres as the main design element.

Once again, I had to clean up the stringing and blobbing using a riffler.
// Star of stars
// by Kevin Karplus
// Creative Commons Attribution-ShareAlike (CC BY-SA 3.0)
// 2019 Aug 10
use <BOSL2/std.scad>
// BOSL2 from https://github.com/revarbat/BOSL2/
// used for offset
function inner_radius(r_outer, n, k) =
assert(k<n/2) assert(k>0)
let(straight_ratio = cos(180/n) + sin(180/n)*tan(180*k/n))
r_outer/ straight_ratio;
function star_points(r_outer=5, n=5, k=2)=
// Points on circle centered at (0,0) with radius r_outer.
// First point on positive x axis.
// k determines how far out the inner points of the star are,
// with k<1 making a convex polygon with 2n sides,
// k=1 making a regular n-gon
// k=2 making a star that connects alternate points
// k=3 making a star that connects every third point, ...
// k need not be integer
// You can get a nice, fat star with k=(n-2)/2
let(r_inner = inner_radius(r_outer, n, k))
[for (i=[0:2*n-1])
(i%2==0? r_outer: r_inner)*[cos(i*180/n), sin(i*180/n)]];
module star(r_outer=5, n=5, k=2)
// Make a polyhedral star with n points.
{ points = star_points(r_outer=r_outer,n=n,k=k);
polygon(points=points, convexity=n);
}
module star_outline(n=5, r=50, line=2,k=undef)
{
k_star = k==undef? (n-2)/2: k;
points = star_points(r_outer=r,n=n,k=k_star);
echo(points=points);
inner = offset(points, delta=-line, closed=true);
echo(inner=inner);
difference()
{ polygon(points);
polygon(inner);
}
}
module star_of_stars(n=5, r=50, line=2, k=undef)
{
k_star = k==undef? (n-1)/2: k;
r_sub = inner_radius(r, n, k_star);
star_outline(n=n, r= 2*r_sub, line=line, k=k_star);
for (i=[0:n-1])
{
rotate((2*i+1)*180/n)
translate([2*cos(180/n)*r_sub,0])
rotate(((n+1)%2)*180/n)
star_outline(n=n,r=r_sub+0.001, line=line, k=k_star);
}
}
module solid_star(n=5, r=50, k=undef, height=undef)
// Make a solid star with n points and outer radius r
// k is a skinniness parameter (0 to n/2), as defined in star
// default value is (n-2)/2, which makes a slightly fat star
// (try n/2 for a skinny star)
// height is the height of the star, default is r/3
{
k_star = k==undef? (n-2)/2: k;
h = height==undef? r/3: height;
linear_extrude(height=h, scale=0)
star(n=n,k=k_star, r_outer=r);
}
module solid_star_of_stars(n=5, line=2, r=50)
{
small_r = 3*line;
r_sub = inner_radius(r, n, (n-1)/2);
outer_center= [(2*cos(180/n)+1)*r_sub-small_r,0];
difference()
{ union()
{
linear_extrude(line)
star_of_stars(r=r, n=n, line=line);
intersection()
{ translate([0,0,0.0015]) cylinder(r=1.2*r, h=2*line, $fn=20);
for (i=[0:n-1])
{ rotate([0,0,i*360/n])
translate([r_sub,0,0])
{ linear_extrude(line) star(r_outer=3*line,n=n, k=(n-2)/2);
color("blue") translate([0,0,line])
solid_star(r=small_r, height=2*line, n=n, k=(n-2)/2);
}
}
}
intersection()
{ translate([0,0,0.001]) cylinder(r=1.2*r, h=2*line, $fn=20);
for (i=[0:n-1])
{
rotate((2*i+1)*180/n) translate(outer_center)
{ rotate(((n+1)%2)*180/n)
{ linear_extrude(line) star(r_outer=3*line,n=n, k=(n-2)/2);
color("red") translate([0,0,line])
solid_star(r=3*line, height=2*line, n=n, k=(n-2)/2);
}
}
}
}
}
for (i=[0:n-1])
{
rotate((2*i+1)*180/n) translate(outer_center)
cylinder(d=line, h=5*line, center=true, $fn=30);
}
}
}
solid_star_of_stars(n=5);
Released on Thingiverse as https://www.thingiverse.com/thing:3805111
Like this:
Like Loading...