From 0edf8c29461ac6a14a7d3ff896da8b636d49ac25 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Wed, 18 Sep 2019 18:07:34 +0800 Subject: [PATCH] use connector_peg to refactor --- examples/spring_dog.scad | 218 ++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 127 deletions(-) diff --git a/examples/spring_dog.scad b/examples/spring_dog.scad index 8b4f2637..db470905 100644 --- a/examples/spring_dog.scad +++ b/examples/spring_dog.scad @@ -11,6 +11,7 @@ include ; include ; include ; include ; +include ; part = "PREVIEW"; // [FRONT, SPRING, BACK, PREVIEW] @@ -19,44 +20,9 @@ spring_levels = 20; line_thickness = 4; line_distance = 1.5; -latch_r1 = 2.5; -latch_r2 = 3; -latch_h = 6; -latch_spacing = 0.4; - - -module latch_prototype(r1, r2, h) { - rd = r2 - r1; - - linear_extrude(h) - circle(r1); - - translate([0, 0, h - rd]) - rotate_extrude() - translate([r2 - rd, 0, 0]) - circle(rd, $fn = 4); -} - -module latch_convex(r1, r2, h) { - rd = r2 - r1; - - difference() { - latch_prototype(r1, r2, h); - - translate([0, 0, rd * 2]) - linear_extrude(h - rd * 2) - square([rd * 2, r2 * 2], center = true); - - } -} - -module latch_concave(r1, r2, h, spacing) { - latch_prototype(r1 + spacing, r2 + spacing, h); - translate([0, 0, h]) - linear_extrude(spacing) - circle(r2); -} - +shaft_r = 2.5; +plate_h = 6; +spacing = 0.4; module toy_spring(radius, levels, sides, line_thickness, line_distance) { $fn = 4; @@ -84,18 +50,21 @@ module toy_spring(radius, levels, sides, line_thickness, line_distance) { } -module dog_back(head_r, latch_r1, latch_r2, latch_h) { +module dog_back(head_r, shaft_r) { $fn = 36; module foot() { translate([head_r, 0, 0]) union() { - color("PapayaWhip") ellipse_extrude(head_r / 3) polygon( + color("PapayaWhip") + ellipse_extrude(head_r / 3) polygon( shape_ellipse([head_r / 3, head_r / 2]) ); - color("Maroon") linear_extrude(head_r) circle(head_r / 8); + color("Maroon") + linear_extrude(head_r) circle(head_r / 8); - color("Goldenrod") translate([head_r / 45, 0, head_r / 2]) rotate([0, -15, 0]) rounded_cylinder( + color("Goldenrod") translate([head_r / 45, 0, head_r / 2]) + rotate([0, -15, 0]) rounded_cylinder( radius = [head_r / 5, head_r / 3.5], h = head_r * 1.25, round_r = 2 @@ -113,19 +82,19 @@ module dog_back(head_r, latch_r1, latch_r2, latch_h) { translate([0, -head_r / 5, -head_r * 1.65]) feet(); - union() { - color("Goldenrod") scale([1, 1.25, 1]) difference() { - sphere(head_r); - - translate([-head_r, head_r / 6, -head_r]) - cube(head_r * 2); - } + + color("Goldenrod") scale([1, 1.25, 1]) + difference() { + sphere(head_r); + translate([-head_r, head_r / 6, -head_r]) + cube(head_r * 2); } } module back() { mirror([0, 1, 0]) body_feet(); + rotate([-36.5, 0, 0]) color("Goldenrod") linear_extrude(head_r * 2, scale = 0.5) @@ -136,32 +105,31 @@ module dog_back(head_r, latch_r1, latch_r2, latch_h) { color("Goldenrod") translate([0, -head_r * 0.2, 0]) rotate([90, 0, 0]) - latch_convex(latch_r1, latch_r2, latch_h); + connector_peg(shaft_r, spacing); } -module spring_dog_spring(head_r, spring_levels, line_thickness, line_distance, latch_r1, latch_r2, latch_h, latch_spacing) { +module spring_dog_spring(head_r, spring_levels, line_thickness, line_distance, shaft_r, plate_h, spacing) { spring_sides = 36; h = spring_levels * line_thickness; - module latch_plate_back() { + module plate_back() { difference() { - linear_extrude(latch_h + latch_spacing) + linear_extrude(plate_h + spacing) circle(head_r); - - latch_concave(latch_r1, latch_r2, latch_h, latch_spacing, $fn = spring_sides); + connector_peg(shaft_r, spacing, void = true, $fn = spring_sides); } } - module latch_plate_front() { - linear_extrude(latch_h + latch_spacing) + module plate_front() { + linear_extrude(plate_h + spacing) circle(head_r); - translate([0, 0, latch_h + latch_spacing]) - latch_convex(latch_r1, latch_r2, latch_h, $fn = spring_sides); + translate([0, 0, plate_h + spacing]) + connector_peg(shaft_r, spacing, $fn = spring_sides); } - color("yellow") union() { - latch_plate_back(); + color("yellow") { + plate_back(); translate([0, 0, line_thickness / 2]) toy_spring( head_r - line_thickness / 1.5, @@ -172,15 +140,14 @@ module spring_dog_spring(head_r, spring_levels, line_thickness, line_distance, l ); translate([0, 0, h + line_distance * spring_levels]) - latch_plate_front(); + plate_front(); } } -module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { +module dog_front(head_r, shaft_r, spacing) { $fn = 36; module head() { - module head_nose() { color("Goldenrod") rotate([-15, 0, 0]) @@ -208,34 +175,33 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { module eye() { translate([head_r / 2, -head_r / 1.75, head_r / 3]) rotate([-20, 5, 30]) - scale([1.2, 0.5, 1]) union() { + scale([1.2, 0.5, 1]) { color("Goldenrod") - sphere(head_r / 3); + sphere(head_r / 3); - color("white") - translate([0, 0, -head_r / 15]) - rotate([-25, -10, 0]) - scale([1.1, 1.25, 1.2]) - sphere(head_r / 3.5); + color("white") + translate([0, 0, -head_r / 15]) + rotate([-25, -10, 0]) + scale([1.1, 1.25, 1.2]) + sphere(head_r / 3.5); color("black") - translate([-head_r / 15, -head_r / 4, -head_r / 12]) - sphere(head_r / 7); + translate([-head_r / 15, -head_r / 4, -head_r / 12]) + sphere(head_r / 7); } } module eyes() { eye(); - mirror([1, 0, 0]) - eye(); + mirror([1, 0, 0]) eye(); } module eyebrow() { color("black") - translate([head_r / 2.5, -head_r / 2.5, head_r / 3]) - rotate([60, 15, 30]) - linear_extrude(head_r / 2, center = true) scale([1.5, 1, 1]) - arc(radius = head_r / 3, angle = 120, width = head_r / 20); + translate([head_r / 2.5, -head_r / 2.5, head_r / 3]) + rotate([60, 15, 30]) + linear_extrude(head_r / 2, center = true) scale([1.5, 1, 1]) + arc(radius = head_r / 3, angle = 120, width = head_r / 20); } @@ -248,19 +214,19 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { module ear() { color("Maroon") - rotate([-15, 0, -10]) - translate([-head_r / 2.75, head_r / 15, -head_r / 2.75]) - rotate([0, -60, 0]) - scale([1.25, 1, 1]) intersection() { - translate([head_r, 0, 0]) - linear_extrude(head_r) - polygon(shape_pts); + rotate([-15, 0, -10]) + translate([-head_r / 2.75, head_r / 15, -head_r / 2.75]) + rotate([0, -60, 0]) + scale([1.25, 1, 1]) intersection() { + translate([head_r, 0, 0]) + linear_extrude(head_r) + polygon(shape_pts); - difference() { - sphere(head_r); - sphere(head_r - head_r / 10); - } - } + difference() { + sphere(head_r); + sphere(head_r - head_r / 10); + } + } } module ears() { @@ -272,19 +238,21 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { eyes(); eyebrows(); ears(); - } module foot() { translate([head_r, -head_r / 11, 0]) union() { - color("PapayaWhip") ellipse_extrude(head_r / 3) polygon( + color("PapayaWhip") + ellipse_extrude(head_r / 3) polygon( shape_ellipse([head_r / 3, head_r / 2]) ); - color("Maroon") linear_extrude(head_r) circle(head_r / 8); + color("Maroon") + linear_extrude(head_r) circle(head_r / 8); - color("Goldenrod") translate([head_r / 45, 0, head_r / 2]) rotate([0, -15, 0]) rounded_cylinder( + color("Goldenrod") + translate([head_r / 45, 0, head_r / 2]) rotate([0, -15, 0]) rounded_cylinder( radius = [head_r / 5, head_r / 3.5], h = head_r * 1.25, round_r = 2 @@ -302,13 +270,12 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { translate([0, -head_r / 5, -head_r * 1.65]) feet(); - union() { - color("Goldenrod") scale([1, 1.25, 1]) difference() { - sphere(head_r); - - translate([-head_r, head_r / 6, -head_r]) - cube(head_r * 2); - } + color("Goldenrod") + scale([1, 1.25, 1]) difference() { + sphere(head_r); + + translate([-head_r, head_r / 6, -head_r]) + cube(head_r * 2); } } @@ -316,47 +283,44 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) { body_feet(); // neck - rotate([60, 0, 0]) - union() { - color("Goldenrod") - linear_extrude(head_r * 2) - circle(head_r / 4); - - color("green") - translate([0, 0, head_r * 1.1]) - rotate([-10, 0, 0]) - rotate_extrude() - translate([head_r / 4, 0, 0]) - circle(head_r / 10); - } + rotate([60, 0, 0]) { + color("Goldenrod") + linear_extrude(head_r * 2) + circle(head_r / 4); + + color("green") + translate([0, 0, head_r * 1.1]) + rotate([-10, 0, 0]) + rotate_extrude() + translate([head_r / 4, 0, 0]) + circle(head_r / 10); + } } - - translate([0, -head_r * 1.75 , head_r * 1.3]) head(); difference() { front(); - - translate([0, head_r * 0.209, 0]) rotate([90, 0, 0]) latch_concave(latch_r1, latch_r2, latch_h, latch_spacing, $fn = 36); + translate([0, head_r * 0.209, 0]) rotate([90, 0, 0]) + connector_peg(shaft_r, spacing, void = true, $fn = 36); } } if(part == "FRONT") { - dog_front(head_radius, latch_r1, latch_r2, latch_h, latch_spacing); + dog_front(head_radius, shaft_r, spacing); } else if(part == "SPRING") { - spring_dog_spring(head_radius, spring_levels, line_thickness, line_distance, latch_r1, latch_r2, latch_h, latch_spacing); - + spring_dog_spring(head_radius, spring_levels, line_thickness, line_distance, shaft_r, plate_h, spacing); } else if(part == "BACK") { - dog_back(head_radius, latch_r1, latch_r2, latch_h); + dog_back(head_radius, shaft_r); } else { - dog_front(head_radius, latch_r1, latch_r2, latch_h, latch_spacing); - translate([0, spring_levels * (line_thickness + line_distance) + latch_h + latch_spacing, 0]) { - rotate([90, 0, 0]) spring_dog_spring(head_radius, spring_levels, line_thickness, line_distance, latch_r1, latch_r2, latch_h, latch_spacing); + dog_front(head_radius, shaft_r, spacing); + translate([0, spring_levels * (line_thickness + line_distance) + plate_h + spacing, 0]) { + rotate([90, 0, 0]) + spring_dog_spring(head_radius, spring_levels, line_thickness, line_distance, shaft_r, plate_h, spacing); - translate([0, 3.25, 0]) dog_back(head_radius, latch_r1, latch_r2, latch_h); + translate([0, 3.25, 0]) dog_back(head_radius, shaft_r); } }