// @see https://www.dakkadakka.com/wiki/en/Basing_Guidelines_for_Warhammer_40,000 // Old base: 28, primaris: 32, hero: 40, dreadnought: 65 diameter = 32.0; // Should the base not have the same radius in the x and y axis? oblong = false; // Oblong diameter. A biker is on a 25x70 base, for eg. oblong_diameter = 70; // 3.5mm for older 28mm bases; newer bases are 4mm base_height = 4; // should a slot be added? slotted = false; // Width of the slot. 2.5 for 28mm bases slot_width = 2.5; // Length of the slot slot_length = 24; // Offset along the x axis slot_offset_x = 3; // Offset along the y axis slot_offset_y = 0; // Should a magnet holder be added underneath magnet_holder = false; // Diameter in mm magnet_diameter = 6; // Depth of the magnet holder walls in mm. magnet_height = 2; // Thickness of magnet wall in mm magnet_wall_thickness = 2; magnet_offset_x = 5; magnet_offset_y = 0; magnet_offset_z = 0; magnet_offset = [magnet_offset_x, magnet_offset_y, magnet_offset_z]; slot_offset = [slot_offset_x, slot_offset_y, 0]; module magnet_holder(diameter, height, offset = [], thickness = 2) { translate(offset) { difference() { cylinder(d = diameter + thickness, h = height, $fn = 360); cylinder(d = diameter, h = height+0.01, $fn = 360); } } } module slot_cutout(width, length, height, offset) { translate(offset) { cube([width, length, height + 1], true); } } module base(r1, r2, h, slot = false, slot_width = 0, slot_length = 0, magnet = false, magnet_diameter = 0, magnet_height = 0, magnet_offset = [], t = 1, slot_offset = [], magnet_wall_thickness = 2) { difference() { scale([r2/r1, 1]) { difference() { cylinder(r1 = r1, r2 = r1 - t, h = h, $fn = 360); cylinder(r1 = r1 - t, r2 = r1 - (2*t), h = h - t, $fn = 360); } } if (slot) { translate([0, 0, h / 2]) { slot_cutout(slot_width, slot_length, h, slot_offset); }; } } if (magnet) { // Move it up to abut against our top if ((h - magnet_height) > 0) { translate([0, 0, h - t]) { cylinder(h - magnet_height, d = magnet_diameter + magnet_wall_thickness, center = true, $fn =360); }; } translate([0, 0, 0]) { magnet_holder(magnet_diameter, magnet_height, magnet_offset, magnet_wall_thickness); } } if (slot) { translate([0, 0, h/2]) { difference() { translate(slot_offset) {cube([slot_width + (2*t), slot_length + (2*t), h], true); } slot_cutout(slot_width, slot_length, h, slot_offset); } } } } r1 = diameter / 2; r2 = oblong ? oblong_diameter / 2 : r1; base( r1 = r1, r2 = r2, h = base_height, slot = slotted, slot_width = slot_width, slot_length = slot_length, magnet = magnet_holder, magnet_diameter = magnet_diameter, magnet_height = magnet_height, magnet_offset = magnet_offset, t = 1, slot_offset = slot_offset, magnet_wall_thickness = magnet_wall_thickness );