gridfinity-rebuilt-bins

Generates stock bins, with a great number of variations.

Bin

Script Parameters

Parameter Range Description
gridx { n>0 | n∈R } number of bases along the x-axis
gridy { n>0 | n∈R } number of bases along the y-axis
gridz { n>0 | n∈R } bin height. See bin height information and "gridz_define" below.
length { n>0 | n∈R } length of one unit of the base.
default: 42 (The Answer to the Ultimate Question of Life,
the Universe, and Everything.)
divx { n>0 | n∈Z } number of compartments along X
divy { n>0 | n∈Z } number of compartments along Y
enable_scoop boolean toggles the fillet on bottom edge for easy removal of items
enable_zsnap boolean automatically snap the bin size to the nearest 7mm increment.
default: true
enable_lip boolean if you are not stacking the bin, you can disable the top lip
to save space. default: true
gridz_define { n>0 | n∈R } determine what the variable "gridz" applies to based on
your use case. default: 0.
• (0) gridz is the height in # of 7mm increments (Zack)
• (1) gridz is the internal height in millimeters
• (2) gridz is the overall external height of the bin in millimeters
height_internal { n>0 | n∈R } height of the internal block.
Can be lower than bin height to save filament on custom bins.
default of 0 means use the calculated height.
style_tab { 0, 1, 2, 3, 4, 5 } how the tabs for labels are generated.
• (0) Full tabs across the entire compartment
• (1) automatic tabs
- left aligned tabs on the left edge
- right aligned tabs on right edge
- center tabs otherwise
• (2) left aligned tabs
• (3) center aligned tabs
• (4) right aligned tabs
• (5) no tabs
style_hole { 0, 1, 2, 3 } the style of holes in the bases
• (0) No holes
• (1) Magnet holes only
• (2) Magnet and screw holes - no printable slit
• (3) Magnet and screw holes - with printable slit
div_base_x { n>=0 | n∈Z } number of divisions per 1 unit of base along the X axis.
(default 1, only use integers.
0 means automatically guess the division)
div_base_y { n>=0 | n∈Z } number of divisions per 1 unit of base along the Y axis.
(default 1, only use integers.
0 means automatically guess the division)


Modules


gridfinityInit (gridx, gridy, height, height_internal, length)

Initializes the top part of the bin (walls and solid section). All bins have to use this module, and have the compartments cut out from it.

Parameter Range Description
gridx { n>0 | n∈R } number of bases along the x-axis
gridy { n>0 | n∈R } number of bases along the y-axis
height { n>0 | n∈R } height of the bin, in millimeters (but not exactly).
See the height() function for more info.
height_internal { n>0 | n∈R } height of the internal block.
Can be lower than bin height to save filament on custom bins.
default of 0 means use the calculated height.
length { n>0 | n∈R } length of one unit of the base.
default: 42 (The Answer to the Ultimate Question of Life,
the Universe, and Everything.)
// Example: generate a 3x3x6 bin with a 42mm unit size
gridfinityInit(3, 3, height(6), 0, 42) {
    cutEqual(n_divx = 3, n_divy = 3, style_tab = 0, enable_scoop = true);
}

height (gridz, gridz_define, enable_lip, enable_zsnap)

Calculates the proper height for bins.

Parameter Range Description
gridz { n>0 | n∈R } bin height. See bin height information and "gridz_define" below.
gridz_define { n>0 | n∈R } determine what the variable "gridz" applies to based on
your use case. default: 0.
• (0) gridz is the height in # of 7mm increments (Zack)
• (1) gridz is the internal height in millimeters
• (2) gridz is the overall external height of the bin in millimeters
enable_lip boolean if you are not stacking the bin, you can disable the top lip
to save space. default: true
enable_zsnap boolean automatically snap the bin size to the nearest 7mm increment.
default: true
// Example: height for a 6 unit high bin
height(6);

// Example: height for a bin that can fit (at maximum) a 30mm high object inside
height(30, 1, true, false); 

gridfinityBase (gridx, gridy, length, div_base_x, div_base_y, style_hole)

Generates the bases for bins. Has various different hole styles, and can be subdivided.

Parameter Range Description
gridx { n>0 | n∈R } number of bases along the x-axis
gridy { n>0 | n∈R } number of bases along the y-axis
length { n>0 | n∈R } length of one unit of the base. default: 42
div_base_x { n>=0 | n∈Z } number of divisions per 1 unit of base along the X axis.
(default 1, only use integers. 0 means automatically guess the division)
div_base_y { n>=0 | n∈Z } number of divisions per 1 unit of base along the Y axis.
(default 1, only use integers. 0 means automatically guess the division)
style_hole { 0, 1, 2, 3 } the style of holes in the bases
• (0) No holes
• (1) Magnet holes only
• (2) Magnet and screw holes - no printable slit
• (3) Magnet and screw holes - with printable slit
// Example: generate a 3x3 base with a 42mm unit size and clean magnet holes
gridfinityBase(3, 3, 42, 0, 0, 1);

cutEqual (n_divx, n_divy, style_tab, enable_scoop)

Generates the "traditional" bin cutters. It is a utility function that creates evenly distributed compartments.

Parameter Range Description
n_divx { n>0 | n∈Z } number of compartments along X
n_divy { n>0 | n∈Z } number of compartments along Y
style_tab { 0, 1, 2, 3, 4, 5 } how the tabs for labels are generated.
• (0) Full tabs across the entire compartment
• (1) automatic tabs
- left aligned tabs on the left edge
- right aligned tabs on right edge
- center tabs otherwise
• (2) left aligned tabs
• (3) center aligned tabs
• (4) right aligned tabs
• (5) no tabs
enable_scoop boolean toggles the fillet on bottom edge for easy removal of items
// Example: this generates 9 compartments in a 3x3 grid, and all compartments have a full tab and a scoop
gridfinityInit(3, 3, height(6), 0, 42) {
    cutEqual(n_divx = 3, n_divy = 3, style_tab = 0, enable_scoop = true);
}

cut (x, y, w, h, t, s)

Cuts a single compartment into the bin at the provided location with the provided attributes. The coordinate system for compartments originates (0,0) at the bottom left corner of the bin, where 1 unit is the length of 1 base. Positive X and positive Y are in the same direction as the global coordinate system.

Parameter Range Description
x { n>=0 | n∈R } X coordinate of the compartment
(position of left edge of compartment)
y { n>=0 | n∈R } Y coordinate of the compartment
(position of bottom edge of compartment)
w { n>0 | n∈R } Width of the compartment, in base units
(1 unit = 1 length)
h { n>0 | n∈R } Height of the compartment, in base units
(1 unit = 1 length)
style_tab { 0, 1, 2, 3, 4, 5 } how the tabs for labels are generated for this compartment.
• (0) Full tabs across the entire compartment
• (1) automatic tabs
- left aligned tabs on the left edge
- right aligned tabs on right edge
- center tabs otherwise
• (2) left aligned tabs
• (3) center aligned tabs
• (4) right aligned tabs
• (5) no tabs
s boolean toggles the fillet on bottom edge for easy removal of items,
only for this specific compartment
// Example:
// this cuts two compartments that are both 1 wide and 2 high. 
// One is on the bottom left, and the other is at the top right. 
gridfinityInit(3, 3, height(6), 0, 42) {
    cut(0, 0, 1, 2, 0, true);
    cut(2, 1, 1, 2, 0, true);
}

cut_move (x, y, w, h)

Moves all of its children from the global origin to the center of the area that a compartment would normally fill, and uses them to cut from the bin. This allows you to easily make custom cutouts in the bin.

Parameter Range Description
x { n>=0 | n∈R } X coordinate of the area (position of left edge)
y { n>=0 | n∈R } Y coordinate of the area (position of bottom edge)
w { n>0 | n∈R } Width of the area, in base units (1 unit = 1 length)
h { n>0 | n∈R } Height of the area, in base units (1 unit = 1 length)
// Example:
// cuts a cylindrical hole of radius 5
// hole center is located 1/2 units from the right edge of the bin, and 1 unit from the top
gridfinityInit(3, 3, height(6), 0, 42) {
    cut_move(x=2, y=1, w=1, h=2) {
          cylinder(r=5, h=100, center=true);
    }
}