include <../../lib/gridfinity-rebuilt-openscad/gridfinity-rebuilt-utility.scad> // There are 2 variants of the rulers, 2 "small" ones and 2 "large" ones. // bin height. See bin height information and "gridz_define" below. gridz = 2; // determine what the variable "gridz" applies to based on your use case gridz_define = 0; // [0:gridz is the height of bins in units of 7mm increments - Zack's method,1:gridz is the internal height in millimeters, 2:gridz is the overall external height of the bin in millimeters] thicknessSmall = 1.25; thicknessLarge = 1.25; widthSmall = 21.00; widthLarge = 28.00; depth = 7 * gridz - 5; // The positioning and gaps between the rulers gap = 8.4; offset = -10; // slide the rules slightly along the X axis to make them easier to grab xSlide = 3; xOffset = -14; // Put the rulers at a slight angle so they are easier to grab rot = -18; module __hide_parameters() {}; $fn = $preview ? 12 : 24; /* [General Settings] */ // number of bases along x-axis gridx = 1; // number of bases along y-axis gridy = 1; /* [Compartments] */ // number of X Divisions (set to zero to have solid bin) divx = 0; // number of y Divisions (set to zero to have solid bin) divy = 0; /* [Height] */ // overrides internal block height of bin (for solid containers). Leave zero for default height. Units: mm height_internal = 0; // snap gridz height to nearest 7mm increment enable_zsnap = false; /* [Features] */ // the type of tabs style_tab = 5; //[0:Full,1:Auto,2:Left,3:Center,4:Right,5:None] // how should the top lip act style_lip = 0; //[0: Regular lip, 1:remove lip subtractively, 2: remove lip and retain height] // scoop weight percentage. 0 disables scoop, 1 is regular scoop. Any real number will scale the scoop. scoop = 1; //[0:0.1:1] // only cut magnet/screw holes at the corners of the bin to save uneccesary print time only_corners = false; /* [Base] */ style_hole = 3; // [0:no holes, 1:magnet holes only, 2: magnet and screw holes - no printable slit, 3: magnet and screw holes - printable slit, 4: Gridfinity Refined hole - no glue needed] // number of divisions per 1 unit of base along the X axis. (default 1, only use integers. 0 means automatically guess the right division) div_base_x = 0; // number of divisions per 1 unit of base along the Y axis. (default 1, only use integers. 0 means automatically guess the right division) div_base_y = 0; difference() { color("tomato") { gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap), height_internal) { if (divx > 0 && divy > 0) cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); } for (i = [0:1:3]) { thickness = i < 2 ? thicknessSmall : thicknessLarge; width = i < 2 ? widthSmall : widthLarge; extraXOffset = i < 2 ? 0 : -7; taperDepth = 5; taperRatio = 1.2; taperWidth = width * taperRatio; translate([xOffset + extraXOffset + xSlide * i, gap * i + offset, 5.4]) rotate([0, 0, rot]) union() { translate([taperWidth / 2.5, thickness / 2, depth - taperDepth]) linear_extrude(height = taperDepth, scale = [taperRatio, 3]) // move square a bit to get a taper equal on both sides translate([-taperWidth / 2.5, -thickness / 2, 0]) square(size=[width, thickness]); cube([width, thickness, depth]); } } }