shape2wire.scad
1 use <ptf/ptf_rotate.scad> 2 use <polyline_join.scad> 3 use <shape_superformula.scad> 4 5 function shape2wire(shape, r) = 6 let( 7 leng_shape = len(shape), 8 a = 360 / leng_shape 9 ) 10 [ 11 for(i = [0:len(shape) - 1]) 12 let(p = shape[i]) 13 ptf_rotate( 14 ptf_rotate([p[0], p[1], 0], [90, 0, 0]) + [r, 0, 0], 15 a * i 16 ) 17 ]; 18 19 phi_step = 0.05; 20 m = 16; 21 n = 0.5; 22 n3 = 16; 23 shape = shape_superformula(phi_step, m, m, n, n, n3) * 30; 24 25 translate([150, 0]) 26 rotate([90, 0, 0]) 27 linear_extrude(1, center = true) 28 difference() { 29 square(120, center = true); 30 polyline_join([each shape, shape[0]]) 31 circle(2.5); 32 } 33 34 wire = shape2wire(shape, 150); 35 rotate(-$t * 360) 36 polyline_join([each wire, wire[0]]) 37 sphere(1.5);