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 difference( intersection( translate(0,-outer_dia,-width/3,cube(outer_dia, outer_dia, width*3)), cylinder(outer_dia,width), rotate(0,0,-sweep, translate(-outer_dia,-outer_dia*2,-width,cube(outer_dia*3,outer_dia*2,width*4))) ), translate(0,0,-width/2,cylinder(outer_dia-thickness*2,width*2)) ); } function main(ARGV) { thickness = "0.3"; outer_dia = "0.8"; height = "1.0"; width = "0.4"; bend_angle = "23.0"; leg1_length = "0.75"; leg2_length = "1.5"; leg1 = translate(0,0,0,cube(leg1_length,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)+cos(bend_angle/180*3.14159265359)*(outer_dia/2-thickness)-(1-cos(bend_angle/180*3.14159265359))*outer_dia/2; leg3 = translate(leg1_length+outer_dia/2+bend_shift,height-thickness,0,cube(leg2_length,thickness,width)); leg2 = translate(leg1_length,outer_dia/2,0,rotate(0,0,-bend_angle,translate(outer_dia/2-thickness,0,0,cube(thickness,diag_length,width)))); knee1 = translate(leg1_length,outer_dia/2,0,knee_arc(outer_dia, thickness, width, bend_angle)); knee2 = translate(leg1_length+outer_dia/2+bend_shift,height-outer_dia/2,0,rotate(0,0,180, knee_arc(outer_dia, thickness, width, bend_angle))); commit(color(1, 0, 0, o_fn(30,rough_tin(union(leg1, knee1, leg2, knee2, leg3))))); }