infty = 100; eps = 0.01; center_l = 16; foam_w = 3.25; center_thick = 0.8; side_thick = 0.8; body_w = center_l + 2*9; front_l = 5; rear_l = 8; side_angle = 40; // smaller is narrower part (angle from the direction of flight) rotate([180, 0, 0]) // print it upside down difference() { // main body translate([-foam_w/2-side_thick, -body_w/2, -rear_l-center_thick]) cube([foam_w + 2*side_thick, body_w, rear_l + center_thick + front_l]); // front slot translate([-foam_w/2, -body_w/2-eps, 0]) cube([foam_w, body_w+2*eps, front_l + eps]); // inner slanted sides for(y = [-1, 1]) scale([1, y, 1]) translate([0, center_l/2, 0]) rotate([side_angle, 0, 0]) translate([-foam_w/2, 0, -infty/2]) cube([foam_w, infty, infty]); // outer hole for rudder intersection() { hull() for (y = [-1:1]) scale([1, y, 1]) { translate([0, center_l/2, 0]) rotate([side_angle, 0, 0]) translate([-infty/2, -center_thick, -infty]) cube([infty, eps, infty]); } translate([-infty/2, -infty/2, -infty-center_thick]) cube(infty); } // debug // translate([-infty, -infty/2, -infty/2]) // cube(infty); }