Skip to content

MythicByte/binpack-3d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Binpack-3D

github crates.io docs.rs

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.

Features

  • 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.

Installation

For Rust

Add the following to your Cargo.toml:

[dependencies]
binpack-3d = "0.1.0" 

For JavaScript/TypeScript (Wasm)

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 web

Usage Example

Rust

use 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();
}

Contributing

Contributions are welcome! Please feel free to submit a Pull Request or open an issue.

License

MPL 2.0

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages