1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-15 03:05:41 +02:00

use connector_peg to refactor

This commit is contained in:
Justin Lin
2019-09-18 18:07:34 +08:00
parent 3252461b32
commit 0edf8c2946

View File

@@ -11,6 +11,7 @@ include <shape_ellipse.scad>;
include <shape_glued2circles.scad>; include <shape_glued2circles.scad>;
include <bezier_curve.scad>; include <bezier_curve.scad>;
include <shape_pie.scad>; include <shape_pie.scad>;
include <part/connector_peg.scad>;
part = "PREVIEW"; // [FRONT, SPRING, BACK, PREVIEW] part = "PREVIEW"; // [FRONT, SPRING, BACK, PREVIEW]
@@ -19,44 +20,9 @@ spring_levels = 20;
line_thickness = 4; line_thickness = 4;
line_distance = 1.5; line_distance = 1.5;
latch_r1 = 2.5; shaft_r = 2.5;
latch_r2 = 3; plate_h = 6;
latch_h = 6; spacing = 0.4;
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);
}
module toy_spring(radius, levels, sides, line_thickness, line_distance) { module toy_spring(radius, levels, sides, line_thickness, line_distance) {
$fn = 4; $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; $fn = 36;
module foot() { module foot() {
translate([head_r, 0, 0]) union() { 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]) 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], radius = [head_r / 5, head_r / 3.5],
h = head_r * 1.25, h = head_r * 1.25,
round_r = 2 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]) translate([0, -head_r / 5, -head_r * 1.65])
feet(); feet();
union() {
color("Goldenrod") scale([1, 1.25, 1]) difference() {
sphere(head_r);
translate([-head_r, head_r / 6, -head_r]) color("Goldenrod") scale([1, 1.25, 1])
cube(head_r * 2); difference() {
} sphere(head_r);
translate([-head_r, head_r / 6, -head_r])
cube(head_r * 2);
} }
} }
module back() { module back() {
mirror([0, 1, 0]) mirror([0, 1, 0])
body_feet(); body_feet();
rotate([-36.5, 0, 0]) rotate([-36.5, 0, 0])
color("Goldenrod") color("Goldenrod")
linear_extrude(head_r * 2, scale = 0.5) 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]) color("Goldenrod") translate([0, -head_r * 0.2, 0])
rotate([90, 0, 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; spring_sides = 36;
h = spring_levels * line_thickness; h = spring_levels * line_thickness;
module latch_plate_back() { module plate_back() {
difference() { difference() {
linear_extrude(latch_h + latch_spacing) linear_extrude(plate_h + spacing)
circle(head_r); circle(head_r);
connector_peg(shaft_r, spacing, void = true, $fn = spring_sides);
latch_concave(latch_r1, latch_r2, latch_h, latch_spacing, $fn = spring_sides);
} }
} }
module latch_plate_front() { module plate_front() {
linear_extrude(latch_h + latch_spacing) linear_extrude(plate_h + spacing)
circle(head_r); circle(head_r);
translate([0, 0, latch_h + latch_spacing]) translate([0, 0, plate_h + spacing])
latch_convex(latch_r1, latch_r2, latch_h, $fn = spring_sides); connector_peg(shaft_r, spacing, $fn = spring_sides);
} }
color("yellow") union() { color("yellow") {
latch_plate_back(); plate_back();
translate([0, 0, line_thickness / 2]) toy_spring( translate([0, 0, line_thickness / 2]) toy_spring(
head_r - line_thickness / 1.5, 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]) 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; $fn = 36;
module head() { module head() {
module head_nose() { module head_nose() {
color("Goldenrod") color("Goldenrod")
rotate([-15, 0, 0]) rotate([-15, 0, 0])
@@ -208,34 +175,33 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) {
module eye() { module eye() {
translate([head_r / 2, -head_r / 1.75, head_r / 3]) translate([head_r / 2, -head_r / 1.75, head_r / 3])
rotate([-20, 5, 30]) rotate([-20, 5, 30])
scale([1.2, 0.5, 1]) union() { scale([1.2, 0.5, 1]) {
color("Goldenrod") color("Goldenrod")
sphere(head_r / 3); sphere(head_r / 3);
color("white") color("white")
translate([0, 0, -head_r / 15]) translate([0, 0, -head_r / 15])
rotate([-25, -10, 0]) rotate([-25, -10, 0])
scale([1.1, 1.25, 1.2]) scale([1.1, 1.25, 1.2])
sphere(head_r / 3.5); sphere(head_r / 3.5);
color("black") color("black")
translate([-head_r / 15, -head_r / 4, -head_r / 12]) translate([-head_r / 15, -head_r / 4, -head_r / 12])
sphere(head_r / 7); sphere(head_r / 7);
} }
} }
module eyes() { module eyes() {
eye(); eye();
mirror([1, 0, 0]) mirror([1, 0, 0]) eye();
eye();
} }
module eyebrow() { module eyebrow() {
color("black") color("black")
translate([head_r / 2.5, -head_r / 2.5, head_r / 3]) translate([head_r / 2.5, -head_r / 2.5, head_r / 3])
rotate([60, 15, 30]) rotate([60, 15, 30])
linear_extrude(head_r / 2, center = true) scale([1.5, 1, 1]) linear_extrude(head_r / 2, center = true) scale([1.5, 1, 1])
arc(radius = head_r / 3, angle = 120, width = head_r / 20); 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() { module ear() {
color("Maroon") color("Maroon")
rotate([-15, 0, -10]) rotate([-15, 0, -10])
translate([-head_r / 2.75, head_r / 15, -head_r / 2.75]) translate([-head_r / 2.75, head_r / 15, -head_r / 2.75])
rotate([0, -60, 0]) rotate([0, -60, 0])
scale([1.25, 1, 1]) intersection() { scale([1.25, 1, 1]) intersection() {
translate([head_r, 0, 0]) translate([head_r, 0, 0])
linear_extrude(head_r) linear_extrude(head_r)
polygon(shape_pts); polygon(shape_pts);
difference() { difference() {
sphere(head_r); sphere(head_r);
sphere(head_r - head_r / 10); sphere(head_r - head_r / 10);
}
} }
}
} }
module ears() { module ears() {
@@ -272,19 +238,21 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) {
eyes(); eyes();
eyebrows(); eyebrows();
ears(); ears();
} }
module foot() { module foot() {
translate([head_r, -head_r / 11, 0]) union() { 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]) 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], radius = [head_r / 5, head_r / 3.5],
h = head_r * 1.25, h = head_r * 1.25,
round_r = 2 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]) translate([0, -head_r / 5, -head_r * 1.65])
feet(); feet();
union() { color("Goldenrod")
color("Goldenrod") scale([1, 1.25, 1]) difference() { scale([1, 1.25, 1]) difference() {
sphere(head_r); sphere(head_r);
translate([-head_r, head_r / 6, -head_r]) translate([-head_r, head_r / 6, -head_r])
cube(head_r * 2); cube(head_r * 2);
}
} }
} }
@@ -316,47 +283,44 @@ module dog_front(head_r, latch_r1, latch_r2, latch_h, latch_spacing) {
body_feet(); body_feet();
// neck // neck
rotate([60, 0, 0]) rotate([60, 0, 0]) {
union() { color("Goldenrod")
color("Goldenrod") linear_extrude(head_r * 2)
linear_extrude(head_r * 2) circle(head_r / 4);
circle(head_r / 4);
color("green") color("green")
translate([0, 0, head_r * 1.1]) translate([0, 0, head_r * 1.1])
rotate([-10, 0, 0]) rotate([-10, 0, 0])
rotate_extrude() rotate_extrude()
translate([head_r / 4, 0, 0]) translate([head_r / 4, 0, 0])
circle(head_r / 10); circle(head_r / 10);
} }
} }
translate([0, -head_r * 1.75 , head_r * 1.3]) translate([0, -head_r * 1.75 , head_r * 1.3])
head(); head();
difference() { difference() {
front(); front();
translate([0, head_r * 0.209, 0]) rotate([90, 0, 0])
translate([0, head_r * 0.209, 0]) rotate([90, 0, 0]) latch_concave(latch_r1, latch_r2, latch_h, latch_spacing, $fn = 36); connector_peg(shaft_r, spacing, void = true, $fn = 36);
} }
} }
if(part == "FRONT") { 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") { } 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") { } else if(part == "BACK") {
dog_back(head_radius, latch_r1, latch_r2, latch_h); dog_back(head_radius, shaft_r);
} }
else { else {
dog_front(head_radius, latch_r1, latch_r2, latch_h, latch_spacing); dog_front(head_radius, shaft_r, spacing);
translate([0, spring_levels * (line_thickness + line_distance) + latch_h + latch_spacing, 0]) { 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, latch_r1, latch_r2, latch_h, latch_spacing); 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);
} }
} }