X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=earring-stand.scad;h=e3df5ac49ac68db3046ff23e5d56cbc2fce4224f;hb=f69e678e2d115bd4bbcc1018096bd83d79ce2245;hp=08f0701ebc0d5281e7efc655c37e415f4bca7fc4;hpb=ffffbd7f0e6e24d88423d0cf1e994f587d7bcb01;p=reprap-play.git diff --git a/earring-stand.scad b/earring-stand.scad index 08f0701..e3df5ac 100644 --- a/earring-stand.scad +++ b/earring-stand.scad @@ -1,16 +1,29 @@ // -*- C -*- +include + +front_height = 80; +front_width = 120; +front_setback = 30; + eclip_inner_rad = 2.5; -eclip_gap_rad = 0.5; -eclip_prong_th = 3; +eclip_gap_rad = 0.1; +eclip_prong_th = 2.25; eclip_outer_strt = 0.5; eclip_inner_xstrt = 0.5; eclip_ult_angle = 44; eclip_base_epsilon = 0.5; +eclip_each_len = 6; +eclip_each_every = 29; + test_alpha = 10; test_main_th = 1.5; +test_eclips = 5; +test_base_th = 2.5; +test_len = eclip_each_len + eclip_each_every*(test_eclips-1); +echo("test_len",test_len); // calculated @@ -27,6 +40,11 @@ ppxl = -(r0 / sqrt(2)) + (eclip_inner_strt / sqrt(2)); rgap = eclip_gap_rad; +eclip_base_offset = r1; +eclip_wall_offset = -ppxl; + +eclip_ra_offset = r2 - 0.1; + $fn=70; module EclipLPlanCore(alpha){ @@ -71,6 +89,113 @@ module EclipPPlan(main_th){ translate([ppxl, 0]) square([main_th, r2]); } -color("red") EclipLPlan(test_alpha); -color("blue") rotate(test_alpha) EclipPPlan(test_main_th); -color("green") EclipRPlan(test_alpha, test_main_th); +module TestBase(){ ////toplevel + translate([0,0, eclip_base_offset]){ + for (i=[1 : 2: test_eclips-2]) { + translate([0, i*eclip_each_every]) + rotate([90,0,0]) + linear_extrude(height=eclip_each_len) + EclipLPlan(test_alpha); + } + for (j=[0 : 2: test_eclips-1]) { + translate([0, j*eclip_each_every]) + rotate([90,0,0]) + linear_extrude(height=eclip_each_len) + EclipRPlan(test_alpha, test_main_th); + } + } + translate([-r2, -eclip_each_len, -test_base_th]){ + difference(){ + cube([r2*2, + test_len, + test_base_th]); + mirror([0,0,1]) Commitid_BestCount_M([r2*2, test_len]); + } + } +} + +module TestProtr(){ ////toplevel + difference(){ + translate([0,0, test_main_th - eclip_wall_offset]) + rotate([0,90,0]) + linear_extrude(height=test_len) + EclipPPlan(test_main_th); + mirror([0,0,1]) Commitid_BestCount_M([test_len, r2]); + } +} + +module TestRAProtr(){ ////toplevel + rotate([-90,0,0]) TestProtr(); + mirror([1,0,0]) + translate([-test_len, + -r2, + -(eclip_ra_offset + test_base_th)]) + cube([test_len, + r2*2, + test_base_th]); +} + +module TestPlanDemo(){ + color("red") EclipLPlan(test_alpha); + color("blue") rotate(test_alpha) EclipPPlan(test_main_th); + color("green") EclipRPlan(test_alpha, test_main_th); +} + +beta = asin(front_setback / front_height); + +uf = [-sin(beta), cos(beta)]; +ur = [-uf[0], uf[1]]; + +pp = [0, 0]; +pq = pp + uf*front_height + ur*eclip_ra_offset; +pr = [ pq[0] - eclip_base_offset + eclip_wall_offset, 0 ]; + +module Sketch(){ + polygon([pq, pp, pr]); +} + +thicks = [ 2, 2, 2 ]; + +module Joins(alpha, objnum, objnum_f, objnum_m) { + echo("Joins",objnum, objnum_f, objnum_m); + thm = thicks[objnum_m]; + if (objnum==objnum_f) { + EclipLPlan(alpha); + EclipRPlan(alpha, thm); + } + if (objnum==objnum_m) + rotate(alpha) + EclipPPlan(thm); +} + +module ObjectJoins(objnum){ + echo("Object",objnum); + translate(pp) Joins(beta, objnum, 0,1); + translate(pr) mirror([1,0,0]) Joins(0, objnum, 0,2); + translate(pq) rotate([0,0,-90]) Joins(beta, objnum, 2,1); +} + +module Base(){ + ObjectJoins(0); +} + +module Front(){ + ObjectJoins(1); +} + +module Back(){ + ObjectJoins(2); +} + +module Demo(){ + Base(); + Front(); + Back(); +} + +//PlanDemo(); +//TestBase(); +//TestProtr(); +//TestRAProtr(); +//Sketch(); +//Demo();