X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=wardrobe-hook.scad;h=d7c070c788278965b9fabc961610d2338ef7aa9e;hp=331121cffc1772c73cefc8d38e703252bbb990eb;hb=1d895ba8cd856658c5f5ebdf20b854b4ca2baa81;hpb=35c4ebb85758082fd30687a14098f399a6abd914 diff --git a/wardrobe-hook.scad b/wardrobe-hook.scad index 331121c..d7c070c 100644 --- a/wardrobe-hook.scad +++ b/wardrobe-hook.scad @@ -101,7 +101,7 @@ module PlaneAbove(){ taperangle = -270 + tangent_intersect_beta([-hookcy, 0], hookoutrad, [-eltop[1], -eltop[0]]); -module Hook(){ ////toplevel +module HookL(){ ////toplevel difference(){ rotate([taperangle,0,0]) translate([0,-eltop[1],0]) @@ -114,22 +114,101 @@ module Hook(){ ////toplevel } } -// frontbackly version, everything prefixed with f or F +// straight-on version, everything prefixed with s or S -fstemleny = -hookcy; -fbend = atan((tuberad - hookinrad) / fstemleny); +shookcy = -(stemlen-hookoutrad); +sstemleny = -shookcy; +sbend_raw = tangents_intersect_beta([0,0],tuberad, + [0,shookcy],hookinrad); +sbend = angle_map_range(360-sbend_raw, -180); -module FPlan(){ - ClipPlan(fbend, fstemleny); +module SPlan(){ + ClipPlan(sbend, sstemleny); + FArcSegment(0,shookcy, hookinrad,hookoutrad, + 270 - hookcurl, + hookcurl + 90 - sbend); } -// toplevels etc. +module SElevation(){ + boty = shookcy - hookoutrad - 1; + polygon([[-1, tubeheight], + [topwidth, tubeheight], + [topwidth, elmid[1]], + [hookwidth, shookcy], + [hookwidth, boty], + [-1, boty]]); +} -module RightHook(){ ////toplevel - mirror([1,0,0]) Hook(); +module SElevationPlaced(){ + rotate([0,-90,0]) translate([0,0,-100]) linear_extrude(height=200) + SElevation(); } -FPlan(); -translate([60,0,0]) Plan(); -//ElevationCore(); -//RightHook(); +module SHookL(){ ///toplevel + intersection(){ + linear_extrude(height=topwidth) SPlan(); + SElevationPlaced(); + } +} + +// straight-on version, reversed, everything prefixed with t or T + +tjoinrad = mainoutrad * 0.7; +tstem0leny = tuberad - tjoinrad*0.5; +tjoinoutrad = tjoinrad + mainthick; + +thookcy = shookcy; + +tjoin0c = [tuberad - tjoinrad, -tstem0leny]; +tjoin1c = [0, thookcy]; + +tbend_raw = tangents_intersect_beta(tjoin0c, tjoinrad, + tjoin1c, -hookoutrad); +tbend0 = angle_map_range(tbend_raw, 0); +tbend1 = angle_map_range(tbend_raw + 180, -180); + +tbend0p = circle_point(tjoin0c, tjoinrad, tbend_raw); +tbend1p = circle_point(tjoin1c, -hookoutrad, tbend_raw); + +module TPlan(){ + ClipPlan(0, tstem0leny); + FArcSegment(tjoin0c[0],tjoin0c[1], tjoinrad,tjoinoutrad, + tbend0, 360-tbend0); + FArcSegment(0,shookcy, hookinrad,hookoutrad, + tbend1, 270+hookcurl - tbend1); + translate(tbend0p) { + rotate(tbend_raw+180) mirror([1,0]) { + translate([0,-0.1]) square(size=[mainthick, dist2d(tbend0p,tbend1p)+0.2]); + } + } +} + +module THookR(){ ///toplevel + intersection(){ + linear_extrude(height=topwidth) TPlan(); + SElevationPlaced(); + } +} + +// other toplevels etc. + +module HookR(){ ////toplevel + mirror([1,0,0]) HookL(); +} + +module SHookR(){ ////toplevel + mirror([1,0,0]) SHookL(); +} + +module THookL(){ ////toplevel + mirror([1,0,0]) THookR(); +} + +module Demo(){ ////toplevel + translate([-30,tubeheight,0]) HookL(); + translate([ 0,tubeheight,0]) HookR(); + translate([ 30, 0,0]) SHookL(); + translate([ 60, 0,0]) SHookR(); + translate([ 90, 0,0]) THookL(); + translate([120, 0,0]) THookR(); +}