Index: work/openscad/smd_leg.fawk =================================================================== --- work/openscad/smd_leg.fawk (nonexistent) +++ work/openscad/smd_leg.fawk (revision 38305) @@ -0,0 +1,48 @@ +function rough_tin(obj) +{ + return + color(0.6, 0.6, 0.8, + o_bump(0.03, 0.05, + obj + ) + ); +} + +function knee_arc(outer_dia, thickness, width, sweep) +{ + return + intersection( + difference(cylinder(outer_dia,width), + translate(0,0,-width/2,cylinder(outer_dia-thickness*2,width*2))), + translate(0,-outer_dia/2,-width/2,cube(outer_dia/2, outer_dia/2, width*2)), + rotate(0,0,-sweep, translate(0,-outer_dia*2,-width/2,cube(outer_dia*2,outer_dia*2,width*2))) + ); +} + + +function main(ARGV) +{ + +length_total = "2.0"; +thickness = "0.3"; +outer_dia = "0.8"; +height = "1.0"; +width = "0.4"; +bend_angle = "25.0"; +bend_start = "0.75"; + +leg1 = translate(0,0,0,cube(bend_start,thickness,width)); + +diag_length = (height-outer_dia+outer_dia/2*sin(bend_angle/180*3.14159265359)+(outer_dia/2-thickness)*sin(bend_angle/180*3.14159265359))/cos(bend_angle/180*3.14159265359); + +bend_shift = diag_length*sin(bend_angle/180*3.14159265359)-(1-cos(bend_angle/180*3.14159265359))*(outer_dia/2-thickness)-(1-cos(bend_angle/180*3.14159265359))*outer_dia/2; + +leg3 = translate(length_total-bend_start+bend_shift,height-thickness,0,cube(bend_start,thickness,width)); + +leg2 = translate(bend_start,outer_dia/2,0,rotate(0,0,-bend_angle,translate(outer_dia/2-thickness,0,0,cube(thickness,diag_length,width)))); + +knee1 = translate(bend_start,outer_dia/2,0,knee_arc(outer_dia, thickness, width, bend_angle)); +knee2 = translate(length_total-bend_start+bend_shift,height-outer_dia/2,0,rotate(0,0,180, knee_arc(outer_dia, thickness, width, bend_angle))); + +commit(rough_tin(union(leg1, knee1, leg2, knee2, leg3))); +}