// fourbar.scad // (c) Simon Brooke 2025; CC-BY-SA include include include module fourbar_leg(length=1000, chord=100, long_skew=30, lat_skew=30) { h = length * cos(lat_skew) * cos( long_skew); w = length * sin( lat_skew); d = length * sin( long_skew); translate([0, 0-w, 0]) { // upper pivot needs a complex trig transformation! translate([d - (chord/2), w, h + chord]) rotate([0, 90+long_skew, 0]) color("black") cylinder(h=chord, r=12); // lower pivot: translate([0 - chord, 0, (chord/2 * sin(long_skew))]) rotate([0, 90+long_skew, 0]) color("black") cylinder(h=chord, r=12); // aerofoil section sskew([0, long_skew, 0, 0, 0, 0]) rotate([lat_skew, 0, 180]) color("black") airfoil(h=length, L=chord); } } module lower_knuckle(chord=100, pivot_radius=12) { difference() { cube([chord * 1.5, pivot_radius * 3, chord*.66]); translate([ chord*0.25, -1, pivot_radius * 2]) cube([chord, pivot_radius * 4, pivot_radius * 4]); } } module fourbar_axle_half( length, chord, long_skew) { shoulder=650; lat_skew=30; rise=8; // I've got something wrong in computing the half-lower-bar // length, and I don't know what. fudge=0; w = ((length * sin(lat_skew) ) + ( shoulder / 2)); l_hlb= w * (1/cos(rise)) + fudge; v_offset=l_hlb * sin(rise); echo("long_skew", long_skew); translate([0, 0, 0 - v_offset]) rotate([90-rise, 0, 180]) color("black") airfoil(h=l_hlb, L=chord); // lower knuckle translate([(0 - (chord*1.25)), l_hlb * cos(rise), 30]) rotate([0, long_skew, 0]) color("black") lower_knuckle(chord, 12); // wheel translate([-50, l_hlb + 72, -40]) rotate([270, 0, 0]) wheel(iso=451); // brake disk translate([-50, l_hlb + 35, -40]) color("silver") rotate([90, 0, 0]) cylinder(h=1.5, r=75); // brake caliper } module fourbar(length=1000, chord=100, long_skew=30, lat_skew=30, shoulder=650) { w = (length * sin( lat_skew)) + ( shoulder / 2); translate([0, 0-(shoulder/2), 0]) fourbar_leg( length, chord, long_skew, lat_skew); translate([0, (shoulder/2), 0]) mirror([0, 1, 0]) fourbar_leg(length, chord, long_skew, lat_skew); fourbar_axle_half(w, chord, long_skew); mirror([0, 1, 0]) fourbar_axle_half(w, chord, long_skew); } // lower_knuckle(); // fourbar(); // fourbar_axle_half(1000,100, 30);