Skip to main content

Overview

The bin geometry module uses Manifold for constructive solid geometry (CSG) operations to generate Gridfinity bins. It provides two geometry variants:
  • Preview geometry - Simplified for fast 3D viewport rendering
  • Export geometry - Full-precision with per-cell base profiles for 3D printing

Import

BinConfig Interface

Configuration for bin geometry generation.
Source: src/gridfinity/binGeometry.ts:366-379
number
required
Width in grid units (1 unit = 42mm)
number
required
Depth in grid units (1 unit = 42mm)
number
required
Height in grid units (1 unit = 7mm)
number
required
Corner radius in millimeters (typically 3.75mm)
number
required
Wall thickness in millimeters (typically 1.2mm)
number
required
Bottom thickness in millimeters (typically 0.8mm)
boolean
default:"false"
Generate magnet holes at cell corners (6mm × 2mm)
boolean
default:"false"
Generate screw clearance holes (3.2mm diameter)
boolean
default:"false"
Create 45° angled shelf on front wall for labels
number
default:"12"
Label shelf depth in millimeters
number
default:"0"
Number of vertical dividers parallel to Y-axis
number
default:"0"
Number of vertical dividers parallel to X-axis

generateBinPreview

Generates simplified bin geometry for fast viewport rendering.
ManifoldToplevel
required
Manifold WASM module instance
BinConfig
required
Bin configuration

Returns

A Manifold solid object representing the bin geometry.

Geometry Structure

  1. Flat Base (z = 0 → 4.75mm)
    • Single solid slab at full bin width
    • No per-cell profiles (simplified for performance)
    • Rounded corners matching bin corner radius
  2. Hollow Body (z = 4.75mm → top)
    • Outer shell with rounded corners
    • Hollowed cavity with inner corner radius
    • Walls: wallThickness on all sides
    • Bottom: bottomThickness floor
  3. Features
    • Magnet holes (if enabled)
    • Screw holes (if enabled)
    • Label shelf (if enabled)
    • Dividers (if configured)
Source: src/gridfinity/binGeometry.ts:388-420

Example

generateBinExport

Generates full-precision bin geometry for 3D printing.
ManifoldToplevel
required
Manifold WASM module instance
BinConfig
required
Bin configuration

Returns

A Manifold solid object with full-precision geometry.

Geometry Structure

  1. Per-Cell Base Profiles (z = 0 → 4.75mm)
    • Each grid cell has its own 5-layer Z-profile
    • Exact tapered socket dimensions per Gridfinity spec
    • Full-width bridging slab at z = 2.95 → 4.75mm
  2. 5-Layer Z-Profile
    • Layer 1 (z = 0.00 → 0.80mm): Base pad, 4.4mm inset
    • Layer 2 (z = 0.80 → 1.60mm): Chamfer to 2.8mm inset
    • Layer 3 (z = 1.60 → 2.15mm): Straight section
    • Layer 4 (z = 2.15 → 2.95mm): Chamfer to 1.2mm inset
    • Layer 5 (z = 2.95 → 4.75mm): Full-width bridging slab
  3. Body & Features
    • Same hollow body, holes, and features as preview geometry
Source: src/gridfinity/binGeometry.ts:495-537

Z-Profile Details

The export geometry implements the exact Gridfinity base specification:
Source: src/gridfinity/binGeometry.ts:435-440

Example

CSG Operations

The geometry is built using Manifold’s CSG operations:

Boolean Operations

  • Union (add): Combines multiple solids
  • Subtraction (subtract): Removes geometry (for holes, cavities)
  • Intersection (not used in bins)

Primitive Creation

Source: src/gridfinity/binGeometry.ts:8-38

Transformations

Feature Implementation

Magnet Holes

Positioned at cell corners with automatic deduplication:
Source: src/gridfinity/binGeometry.ts:115-131

Screw Holes

Clearance holes through entire base:
Source: src/gridfinity/binGeometry.ts:133-148

Label Shelf

45° wedge cut into front wall:
Source: src/gridfinity/binGeometry.ts:171-210

Dividers

Vertical walls subdividing the cavity:
Source: src/gridfinity/binGeometry.ts:214-246

Performance Considerations

Preview vs Export

Optimization Tips

  • Use generateBinPreview for real-time 3D viewport updates
  • Use generateBinExport only when exporting to 3MF
  • Delete Manifold objects after use to free memory:

Memory Management

Manifold uses WASM memory that must be manually freed:
Source: src/gridfinity/binGeometry.ts:61-72