diff --git a/examples/dragon/dragon_and_pearl.scad b/examples/dragon/dragon_and_pearl.scad index 6de3f43c..3be92bdd 100644 --- a/examples/dragon/dragon_and_pearl.scad +++ b/examples/dragon/dragon_and_pearl.scad @@ -122,9 +122,9 @@ module dragon_and_perl() { leng_body_path = len(body_path); angy_angz = __angy_angz(body_path[0], body_path[1]); - translate([1, 7, 14]) - rotate([-135, 0, 3]) - scale(1.15) + translate([0, 10, 13.5]) + rotate([-138, -4, 8]) + scale(1) rotate([0, angy_angz[0], angy_angz[1]]) dragon_head(); diff --git a/examples/dragon/dragon_head.scad b/examples/dragon/dragon_head.scad index f490f1f1..1b7f33b2 100644 --- a/examples/dragon/dragon_head.scad +++ b/examples/dragon/dragon_head.scad @@ -12,32 +12,64 @@ dragon_head(); module dragon_head() { module hair() { - for(i = [16:36]) { - rotate(i * 10 + rands(0, 5, 1, i)[0]) - translate([0, -13, 0]) - rotate([8 + rands(0, 2, 1, i)[0], 0, 0]) - linear_extrude(12 + rands(0, 5, 1, i)[0], scale = 0.05, twist = 50 - rands(0, 100, 1, seed = i)[0]) - translate([0, 10, 0]) - circle(3, $fn = 5); - } - for(i = [0:35]) { rotate(i * 12 + rands(0, 5, 1, i)[0]) - translate([0, -11.5, 0]) - rotate([4 + rands(0, 2, 1, i)[0], 0, 0]) - linear_extrude(14 + rands(0, 5, 1, i)[0], scale = 0.05, twist = 50 - rands(0, 100, 1, seed = i + 1)[0]) + translate([0, -11.5, .2]) + rotate([rands(0, 2, 1, i)[0], 0, 0]) + linear_extrude(10 + rands(0, 5, 1, i)[0], scale = 0.05, twist = 50 - rands(0, 100, 1, seed = i + 1)[0]) translate([0, 10, 0]) circle(3.5, $fn = 6); } - - for(i = [0:35]) { - rotate(i * 10) - translate([0, -10, 0]) - rotate([2, 0, 0]) - linear_extrude(16 + rands(0, 5, 1, i)[0], scale = 0.05, twist = 50 - rands(0, 100, 1, seed = i + 2)[0]) - translate([0, 10, 0]) - circle(3.5, $fn = 5); - } + + module face_fin() { + t_step = 0.05; + + points = bezier_curve(t_step, + [[-24.5, -31.5, -20], [20, 2, -15], [10, 15, 2], [25, 15, 10]] * 0.25 + ); + + c = shape_circle(2.8, $fn = 5); + + translate([9.5, 0, 0]) + rotate([-25, 0, 25]) + translate([-8, 9, 20]) + rotate([45, -5, 80]) + scale([.5, 1.17, 1.4]) + path_extrude(c * 1.2, points, scale = 0.05, twist = -60); + + points2 = bezier_curve(t_step, + [[-47, -35, -20], [-15, -5, 0], [-15, -20, 5], [-5, 15, 10]] * 0.25 + ); + + translate([13.5, -.1, -1.2]) + rotate([-26.5, 0, 25]) + translate([-8, 9, 20]) + rotate([60, -15, 70]) + scale(.75) + scale([.5, 1.25, 1.5]) + path_extrude(c, points2, scale = 0.05, twist = -60); + } + + face_fin(); + mirror([0, 1, 0]) + face_fin(); + } + + + module middle_horn() { + t_step = 0.05; + + p0 = [0, 0, -.4]; + p1 = [0, 0, 5]; + p2 = [0, -5, 7]; + p3 = [0, -5, 10]; + + points = bezier_curve(t_step, + [p0, p1, p2, p3] + ); + + c = shape_circle(2.8, $fn = 4); + path_extrude(c, points, scale = 0.05); } module one_horn() { @@ -70,11 +102,11 @@ module dragon_head() { rotate([90, 0, -90]) sweep(m_transpose([path1, path2, path3, path4, path5])); - translate([0, 0, -3.25]) + translate([-.15, 0, -3.3]) rotate([90, 0, -90]) ellipse_extrude(5.5, slices = 2) polygon( - shape_trapezium([5, 18], + shape_trapezium([5, 16.75], h = 20, corner_r = 2, $fn = 4) ); @@ -91,7 +123,6 @@ module dragon_head() { corner_r = 2, $fn = 5) ); - jpath1 = curve(0.4, [[-10, 16], [0, 8], [4, 5], [3, 0], [2, -5], [2, -10], [0, -13.5], [-3, -14]]); rotate([90, -4, 0]) linear_extrude(25, center = true) @@ -139,9 +170,17 @@ module dragon_head() { { rotate(-90) { one_horn(); - mirror([-1, 0, 0]) one_horn(); + mirror([-1, 0, 0]) + one_horn(); + + translate([0, -5, 0]) + middle_horn(); + + translate([0, -5, 5]) + scale([.4, .4, .45]) + middle_horn(); } - + mouth(); one_eye(); diff --git a/examples/dragon/hilbert_dragon.scad b/examples/dragon/hilbert_dragon.scad index d1ca0675..48d8f10e 100644 --- a/examples/dragon/hilbert_dragon.scad +++ b/examples/dragon/hilbert_dragon.scad @@ -54,8 +54,9 @@ module hilbert_dragon() { mirror([0, 0, .2]) tail(); - translate([0, 0, -2.5]) - scale(0.035) + translate([.06, 0, -2.4]) + scale(0.033) + rotate([0, -15, 0]) dragon_head(); } diff --git a/examples/dragon/infinity_dragon.scad b/examples/dragon/infinity_dragon.scad index 582afb3b..15197e4d 100644 --- a/examples/dragon/infinity_dragon.scad +++ b/examples/dragon/infinity_dragon.scad @@ -119,9 +119,9 @@ module infinity_dragon() { leng_body_path = len(body_path); angy_angz = __angy_angz(body_path[16], body_path[17]); - translate(body_path[0]) - scale(1.125) - rotate([90, angy_angz[0], angy_angz[1] - 90]) + translate(body_path[0] + [0, -1.5, 0]) + scale(1) + rotate([93, angy_angz[0] + 2, angy_angz[1] - 75]) dragon_head(); body_r = 6; diff --git a/examples/dragon/mountain_dragon.scad b/examples/dragon/mountain_dragon.scad index ccfec764..f9b1813d 100644 --- a/examples/dragon/mountain_dragon.scad +++ b/examples/dragon/mountain_dragon.scad @@ -148,8 +148,8 @@ module mountain_dragon() { scale([.5, .725, 1.5]) tail(); - translate([17.5, 0, 63]) - rotate([95, 0, -10]) + translate([16, 0, 63]) + rotate([95, 5, -5]) rotate([0, angy_angz[0], angy_angz[1]]) dragon_head(); diff --git a/examples/dragon/spiral_dragon.scad b/examples/dragon/spiral_dragon.scad index d99781a1..9dceb9b7 100644 --- a/examples/dragon/spiral_dragon.scad +++ b/examples/dragon/spiral_dragon.scad @@ -147,8 +147,8 @@ module spiral_dragon() { scale([.65, .8, 1.4]) tail(); - translate([17.5, 0, 63]) - rotate([95, 0, -10]) + translate([16, 0, 63]) + rotate([95, 5, -5]) rotate([0, angy_angz[0], angy_angz[1]]) dragon_head(); } diff --git a/examples/dragon/torus_knot_dragon.scad b/examples/dragon/torus_knot_dragon.scad index 1a428ffd..5185978c 100644 --- a/examples/dragon/torus_knot_dragon.scad +++ b/examples/dragon/torus_knot_dragon.scad @@ -33,9 +33,9 @@ module torus_knot_dragon() { h_angy_angz = __angy_angz(d_path[len(d_path) - 2], d_path[len(d_path) - 1]); - translate([2.5, -1.1, .55]) - scale(0.07) - rotate([0, h_angy_angz[0] + 28, h_angy_angz[1] + 245]) + translate([2.5, -1.2, .6]) + scale(0.0675) + rotate([0, h_angy_angz[0] + 28, h_angy_angz[1] + 247]) dragon_head(); t_angy_angz = __angy_angz(d_path[1], d_path[0]); diff --git a/examples/dragon/torus_knot_dragon_and_pearl.scad b/examples/dragon/torus_knot_dragon_and_pearl.scad index e5ee9f5b..23cbeaf8 100644 --- a/examples/dragon/torus_knot_dragon_and_pearl.scad +++ b/examples/dragon/torus_knot_dragon_and_pearl.scad @@ -38,9 +38,9 @@ module torus_knot_dragon_and_pearl() { h_angy_angz = __angy_angz(d_path[len(d_path) - 2], d_path[len(d_path) - 1]); - translate([2.5, -1.1, .55]) - scale(0.07) - rotate([0, h_angy_angz[0] + 28, h_angy_angz[1] + 245]) + translate([2.5, -1.2, .65]) + scale(0.06) + rotate([0, h_angy_angz[0] + 28, h_angy_angz[1] + 247]) dragon_head(); t_angy_angz = __angy_angz(d_path[1], d_path[0]);