X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=earring-stand.scad;h=976a83f9babacf4e94ec1274a2f42345d0d91cea;hp=f4479a367b510ce08214b643d835142e6af8e1eb;hb=914da8f1701aedc590aaa542f59ac92e2d9c3bfb;hpb=5e8f3811785a3db22c3a79a289807646c4d7b5fd diff --git a/earring-stand.scad b/earring-stand.scad index f4479a3..976a83f 100644 --- a/earring-stand.scad +++ b/earring-stand.scad @@ -5,6 +5,15 @@ include front_height = 80; front_width = 120; front_setback = 30; +front_thick = 2; + +front_hex_stride = 20; +front_hex_dia = 10; + +back_thick = 3; +back_pillarw = 6; + +base_thick = 2; eclip_inner_rad = 2.5; eclip_gap_rad = 0.1; @@ -23,7 +32,6 @@ 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); num_eclips = 5; @@ -47,6 +55,11 @@ eclip_wall_offset = -ppxl; eclip_ra_offset = r2 - 0.1; +eclip_recept_height = r2; + +eclip_rhs_offset = ppxl + rgap + eclip_prong_th; +// does not include main_th + $fn=70; module EclipLPlanCore(alpha){ @@ -146,22 +159,24 @@ module TestPlanDemo(){ beta = asin(front_setback / front_height); uf = [-sin(beta), cos(beta)]; -ur = [-uf[0], uf[1]]; +ur = [ -uf[1], uf[0]]; pp = [0, 0]; pq = pp + uf*front_height + ur*eclip_ra_offset; -pr = [ pq[0] - eclip_base_offset + eclip_wall_offset, 0 ]; +pr = [ pq[0] - eclip_base_offset - eclip_wall_offset, + 0 ]; + +echo("uf ur P Q R", uf, ur, pp, pq, pr); module Sketch(){ polygon([pq, pp, pr]); } -thicks = [ 2, 2, 2 ]; +thicks = [ base_thick, front_thick, back_thick ]; module Joins(alpha, objnum, objnum_f, objnum_m) { pitch = (front_width - eclip_each_len) / (num_eclips-1); - echo("Joins",objnum, objnum_f, objnum_m); thm = thicks[objnum_m]; stride = (front_width - eclip_each_len) / (num_eclips-1); @@ -192,22 +207,85 @@ module Joins(alpha, objnum, objnum_f, objnum_m) { function r3(pc) = [ pc[0], 0, pc[1] ]; module ObjectJoins(objnum){ - echo("Object",objnum); translate(r3(pp)) Joins(beta, objnum, 0,1); translate(r3(pr)) mirror([1,0,0]) Joins(0, objnum, 0,2); - translate(r3(pq)) rotate([0,90,0]) Joins(beta, objnum, 2,1); + translate(r3(pq)) rotate([0,90,0]) mirror([1,0,0]) Joins(-beta, objnum, 2,1); } module Base(){ - ObjectJoins(0); + xmin = pr[0] - eclip_rhs_offset - thicks[2]; + xmax = pp[0] + eclip_rhs_offset + thicks[1] + + eclip_prong_th * (1/cos(beta) - 1) + + eclip_base_offset * tan(beta); + intersection(){ + ObjectJoins(0); + translate([xmin, + -1, + -50]) + cube([xmax - xmin, + front_width + 2, + 300]); + } + translate([xmin, + 0, + -eclip_base_offset - thicks[0]]) + cube([xmax - xmin, + front_width, + thicks[0]]); +} + +module FrontPattern(){ + totalh = front_height - eclip_wall_offset + thicks[1]; + + ystride = front_hex_stride; + xstride = front_hex_stride * cos(30) * 2; + difference(){ + square([front_width, totalh]); + for (xi=[ 0 : 10 ]) + translate([xi * xstride, 0]) + for (yi=[ 0 : 10 ]) + translate([0, yi * ystride]) + for (dv=[ [0,0], + [xstride/2, ystride/2] + ]) + translate(dv) + circle(r= front_hex_dia/2, $fn=6); + } } module Front(){ ObjectJoins(1); + rotate([0, 90-beta, 0]) + translate([0, 0, ppxl]) + rotate([0,0,90]) { + linear_extrude(height=thicks[1]) + FrontPattern(); + } } module Back(){ ObjectJoins(2); + + zmin = pr[1]; + zmax = pq[1] + eclip_prong_th; + height = zmax - zmin; + + translate([pr[0] + eclip_wall_offset - thicks[2], + 0, 0]) + rotate([0,90,0]) + rotate([0,0,90]) { + difference(){ + cube([front_width, + height, + thicks[2]]); + translate([back_pillarw, + eclip_recept_height, + -10]) + cube([front_width - back_pillarw*2, + height - eclip_recept_height*2 - eclip_prong_th, + 20]); + } + } } module Demo(){