A high-performance, deterministic 3D bin packing library written in Rust. It efficiently packs rectangular cuboids (boxes/items) into a single larger container (bin), prioritizing high-value items and maximizing space utilization.
Built with WebAssembly (Wasm) support, binpack-3d can be utilized natively in Rust backends or directly in the browser via TypeScript/JavaScript.
- Single-Bin Packing: Computes the optimal arrangement for fitting items into a single container, returning placed coordinates and a list of unplaced items.
- Priority-First Logic: Ensures your most important items are packed first, filling remaining space with lower-priority items.
- Full 3D Rotation: Supports all 6 axis-aligned orientations (permutations of width, height, and depth) to find the best fit.
- Configurable Spacing (
gap_mm): Define required spacing between items to account for padding, tolerances, or real-world physical constraints. - Millimeter Precision: Uses integer-based millimeters for reliable geometry calculations without floating-point inaccuracies.
- Wasm Ready: First-class support for
wasm32, allowing you to run the packing algorithms right in the browser. - Deterministic: Provides consistent, repeatable results given the same inputs and configurations.
Add the following to your Cargo.toml:
[dependencies]
binpack-3d = "0.1.0" You can use the Wasm package by importing it into your Node.js or web project once compiled with wasm-pack:
# Build the wasm package
wasm-pack build --target webuse binpack_3d::{Packer, Item, Bin};
fn main() {
let bin = Bin::new(1,Vector3::new(1000,1000,1000),100000,0);
let item = Item::new(1,Vector3::new(10,10,10),10,1);
let mut item_list:Vec<Item> = Vec::with_capacity(x as usize);
for _ in 0..x {
item_list.push(item.clone());
}
let mut algorithmus = SecondAlgorithmen::create_algorithmen(item_list, bin).unwrap();
let result = algorithmus.calculate().unwrap();
}Contributions are welcome! Please feel free to submit a Pull Request or open an issue.
MPL 2.0