// lowerknuckle.scad // (c) Simon Brooke 2025; CC-BY-SA include include include include $fn=64; module lower_bar_end_knuckle_old(chord=100, pivot_radius=12, rise=8,lat_skew=30) { l_body=chord * 1.5; w_body=pivot_radius * 2.5; h_axis=pivot_radius * 2.75; difference() { union () { translate([l_body/2, w_body/2, h_axis]) rotate([0, 90, 0]) cyl(h=l_body, r=w_body/2, rounding=5); // 'except=TOP' in phrase introduces the spurious hulls translate([l_body/2, w_body/2, h_axis*.75]) cuboid([l_body, w_body, h_axis * .75], rounding=5); // bulge for wheel axle; the fork insertion end of // a lefty axle is 25mm diameter translate([chord * 0.25, w_body/2, 0]) rotate([90, 0, 0]) cyl(h=w_body, r=25, rounding=5); // fairing for this translate([chord * 0.25, w_body/2, -3]) rotate([80, 0, 90]) prismoid([w_body, 45], [w_body, 10], rounding=5, h=l_body * .75); } translate([ chord*0.25, -1, pivot_radius * 3]) cube([chord, pivot_radius * 4, pivot_radius * 4]); // scoop for leg-bottom knuckle to rotate within translate([ chord*0.25, w_body/2, h_axis]) rotate([0, 90, 0]) cylinder(h=chord, r=pivot_radius * 1.3); // through hole for pivot axle translate([-1, w_body/2, h_axis]) rotate([0, 90, 0]) cylinder(h=l_body+2, r=pivot_radius/3); // through hole for wheel axle translate([ chord * 0.25, w_body +1, 0]) rotate([90, 0, 0]) cylinder(h=w_body-5, r=12.5); } // airfoil stub to be epoxied into the lower bar of // the linkage translate([chord*1.25, 1, 30]) rotate([90 + rise, 360 - lat_skew, 0]) airfoil(h=chord, L=2 - chord); // // brake disk // translate([(0 - (chord*1.25)), (l_hlb * cos(rise)), 1]) // rotate([90, 0, 0]) // color("silver") // cylinder( h=1.5, r=75); // // wheel (obviously) // translate([(0 - (chord*1.25)), (l_hlb * cos(rise)), -10]) // wheel(); } module lower_bar_end_knuckle(chord=100, pivot_radius=12, rise=8,lat_skew=30, colour="blue") { l_body=chord * 2; w_body=pivot_radius * 2.5; h_body=70; h_axis=pivot_radius * 2.75; v_axis = 0; difference() { union () { // (more streamlined) body translate([158, 0, -22]) rotate([0,0,180]) scale([1, 2, 1]) color( colour) airfoil(h=h_body, L=l_body); // boss for wheel axle translate([ chord * 0.25, w_body * 0.4, 0]) rotate([90, 0, 0]) color( colour) cyl(h=w_body * 1.25, r=20, rounding=5); // airfoil stub to be epoxied into the lower bar of // the linkage translate([chord*1.25, 0 - pivot_radius, 30]) rotate([90 + rise, 360 - lat_skew, 0]) color( colour) airfoil(h=chord, L=2 - chord); } // scoop for leg-bottom knuckle to rotate within translate([ chord*0.25, v_axis, h_axis]) rotate([0, 90, 0]) cylinder(h=chord, r=pivot_radius * 1.3); // space for the airfoil leg to emerge. TODO: This shape is // NOT right, and a square section is not what's called for! translate([chord*0.75, v_axis, h_axis]) rotate([lat_skew, 0, 0]) prismoid([chord, pivot_radius*2.6], [chord, chord], h=chord); // through hole for pivot axle translate([-1, v_axis, h_axis]) rotate([0, 90, 0]) cylinder(h=250, r=pivot_radius/3); // through hole for wheel axle translate([ chord * 0.25, w_body *1.5, 0]) rotate([90, 0, 0]) cylinder(h=w_body * 1.4, r=12.5); // slice off the front bottom translate([chord * 1.25, 0, 0 - w_body]) rotate([270-lat_skew, 0, 90]) color( colour) cuboid([2* w_body, 2*w_body, l_body *.75]); // slice off the upper back translate([0, 0, w_body * 2.5]) rotate([270-lat_skew, 0, 90]) color( colour) cuboid([2* w_body, 2*w_body, l_body *.75]); // radius the top translate([158 - l_body/2,0,h_body-(w_body/2) - 22]) color( colour) scale([1, 1.6, 1]) difference() { translate([0, 0, w_body/4 + 1]) cuboid([l_body, w_body, w_body/2]); rotate([0, 90, 0]) cylinder( h=l_body + 2, r=w_body/2, center=true); } // radius the lower surface color( "blue") difference() { translate([60, 0, 10]) cuboid([l_body + 4, w_body*1.6, 80]); translate([127 - l_body/2, w_body * 0.8 +1, 179]) rotate([90, 0, 0]) cylinder( h=w_body *1.6 + 2, r=l_body); } } } //translate([-125, 0, 0]) // lower_bar_end_knuckle(); //translate([-125, 0, 125]) // color("blue") // lower_bar_end_knuckle(); //translate([-100, 74, 0]) // wheel();