dragon_claw.scad
1 use <curve.scad> 2 use <ptf/ptf_rotate.scad> 3 use <util/dedup.scad> 4 5 module dragon_claw() { 6 pts = [ 7 [0, 0.55], [1, 0.45], [2.5, 0.375], [6, 0.825], [8, -0.375], 8 [8, -0.375], [6, 1.875], [4, 1.6], [1.8, 2.5], [1.5, 2.8], [1.2, 3.3], [1.05, 3.8], [1, 4], [0, 8] 9 ]; 10 11 $fn = 16; 12 13 a = 360 / $fn; 14 x = 6.2 * cos(a); 15 y = 6.2 * sin(a); 16 path = [ 17 [0, 0], [2.5, 0], [x, y], [x + 1, y + 1] 18 ]; 19 path2 = [ 20 for(i = len(path) - 1; i > -1; i = i - 1) 21 ptf_rotate([path[i][0], -path[i][1]], a * 2) 22 ]; 23 24 t_step = 0.25; 25 claw_path_basic = concat(curve(t_step, path), curve(t_step, path2)); 26 claw_path1 = [for(p = claw_path_basic) [p[0] * 1.15, p[1] * 1.1]]; 27 claw_path2 = [for(p = claw_path_basic) ptf_rotate(p * 1.2, a * 2)]; 28 claw_path3 = [for(p = claw_path_basic) ptf_rotate(p * 1.15, a * 4)]; 29 claw_path4 = [for(p = claw_path_basic) ptf_rotate(p * 1.1, a * 6)]; 30 claw_path5 = [for(p = claw_path_basic) ptf_rotate(p, a * 11)]; 31 32 rotate(-15) 33 scale([1.15, 1.3, 1]) 34 rotate(15) 35 intersection() { 36 rotate_extrude($fn = 7) 37 polygon(pts); 38 linear_extrude(5) 39 polygon( 40 dedup( 41 [ 42 each claw_path1, 43 each claw_path2, 44 each claw_path3, 45 each claw_path4, 46 [-2, -.75], 47 [-1.45, -1.45], 48 each claw_path5, 49 [1.45, -1.45], 50 [2, -.75] 51 ] 52 ) 53 ); 54 } 55 }