infty = 300; eps = 0.01; base_w = 30; base_l = 150; center_w = 5; center_l = base_l - base_w; center_h = 1.5; tip_l = 30; wall = 0.8; axle_pos = 0.55; axle_x = base_l/2 - axle_pos*base_l; axle_hole = 1.2 + 0.5; axle_slot = 1.2; axle_top_l = 10; axle_bot_l = 10; axle_top_w = 3; axle_bot_w = 10; axle_h = 3; module body() { // base translate([-base_l/2, -base_w/2, 0 ]) cube([base_l-tip_l, base_w, wall]); // tip translate([base_l/2-tip_l, 0, 0]) scale([2*tip_l/base_w, 1, 1]) cylinder(r = base_w/2, h = wall); // center reinforcement for (y = [-1, 1]) scale([1, y, 1]) hull() { translate([base_l/2-tip_l, axle_bot_l/2, wall]) cube(eps); translate([-base_l/2, axle_bot_l/2, wall]) cube(eps); translate([0, axle_bot_l/2-3, wall]) cube([eps, 6, eps]); translate([0, axle_bot_l/2, wall]) cube([eps, eps, axle_h/2]); } // axle holder hull() { translate([axle_x-axle_bot_w/2, -axle_bot_l/2, wall]) cube([axle_bot_w, axle_bot_l, eps]); translate([axle_x-axle_top_w/2, -axle_top_l/2, wall+axle_h]) cube([axle_top_w, axle_top_l, eps]); } } module ski() { difference() { body(); // slot translate([axle_x-axle_slot/2, -base_w/2, wall+axle_h/2]) cube([axle_slot, base_w, infty]); // hole translate([axle_x, -base_w/2, wall+axle_h/2]) rotate([-90, 0, 0]) cylinder(r = axle_hole/2, h = base_w, $fn = 6); } } ski();