/ examples / dragon / dragon_claw.scad
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  }