// subframe.scad: // (c) Simon Brooke 2025; CC-BY-SA include include include include module subframe_cycleparts(rim=451, chainring_teeth=82, crank=140) { // wheel translate([0, 382, 93]) rotate([0, 0, 90]) wheel(rim=rim, spoke_nbr=0); translate([-42, 382, 93]) rotate([0, 90, 0]) color("grey") sprocket(teeth=30, roller=7.9, pitch=12.7); rotate([90, 0, 90]) translate([660, 180, -40]) chainset( teeth=chainring_teeth, crank=crank); rotate([0,90,0]) translate([-93, 900, 24]) epicyclic(); } module aluminium_subframe (rim=451, chainring_teeth=82, crank=140) { // front leg (supports cross-shaft, epicyclic, motor translate([-25, 820, -60]) color("silver") cube([50, 25, 366]); // bottom bracket leg translate([-25, 680, -90]) color("silver") cube([50, 25, 443]); // wheel leg translate([-100, 345, -111]) rotate([0, 7, 0]) color("silver") cube([25, 75, 519]); // front upper translate([-25, 1100, 200]) rotate([70, 0, 0]) color("silver") cube([50, 25, 425]); // central upper translate([-25, 714, 343]) rotate([82, 0, 0]) color("silver") cube([50, 25, 529]); // rear leg translate([-25, 0, 0]) rotate([-23, 0, 0]) color("silver") cube([50, 25, 485]); subframe_cycleparts(rim, chainring_teeth, crank); } /** * this is more or less right. I need to sculpt out a depression for * the secondary chain, and make a bracket to hold the epicyclic and * motor. */ module carbon_subframe(rim=451, chainring_teeth=82, crank=140) { translate([-25, 0, 0]) color("black") difference() { rotate([90, 0, 90]) linear_extrude( height=50) polygon([[1020, 306], [680, 400], [150,408], [50, 0], [1020, 0]]); translate([-26, 382, 93]) rotate([90,0,90]) cylinder( h=100, r=rim * 0.61); } subframe_cycleparts(rim, chainring_teeth, crank); } module subframe( structure="carbon", rim=451, chainring_teeth=82, crank=140) { if (structure == "carbon") { carbon_subframe(rim=rim, chainring_teeth=chainring_teeth, crank=crank); } else { aluminium_subframe(rim=rim, chainring_teeth=chainring_teeth, crank=crank); } } // subframe( structure="carbon");