use ; // total outer dimension of the lasttretrad ltr_length = 3000; ltr_width = 1000; ltr_height = 160; bed_height = 18; module frame() { board_width=25; board_height=120; bessel=sqrt(3/2) -1; // translate([-l/2, -w/2, 0]) // cube([l, w, h]); translate([0, 0, -board_height - bed_height]) { // front/back boards for (pos = [-0.9, -0.4, 0, 0.4, 0.9]) translate([pos * (ltr_length - board_width)/2 - board_width + board_width/2, -ltr_width/2, 0]) cube([board_width, ltr_width, board_height]); // left/right boards // Positioned at the bessel points (yields minimal mean bend // assuming equal load on the cargo bed); see // https://de.wikipedia.org/wiki/Bessel-Punkt for (pos = [-1,1]) translate([-ltr_length/2, pos * (1 - 2*bessel) * (ltr_width - board_width)/2 - board_width/2, 0]) cube([ltr_length, board_width, board_height]); } } // use a large plywood board module cargo_bed() { translate([0, 0, -bed_height/2]) cube([ltr_length, ltr_width, bed_height], center=true); } // specify (f)ront/(c)enter/(b)ack as -1/0/1 and (l)eft/(r)ight as -1/1 module wheel_position(fcb, lr) { translate([1300 * fcb, 450 * lr, -350]) children(); } // specify (f)ront/(b)ack and (l)eft/(r)ight as -1/1 module steered_wheel(fb=-1, lr=-1, rot=0) { rotate([90, 0, fb*rot]) wheel(); } // specify (l)eft/(r)ight as -1/1 module powered_wheel(lr=-1) { rotate([90]) wheel(); } module lasttretrad() { frame(); cargo_bed(); for (lr = [-1,1]) for (fb = [-1,1]) wheel_position(fb, lr) steered_wheel(fb, lr, rot=30); for (lr = [-1,1]) wheel_position(0, lr) powered_wheel(lr); } lasttretrad();