flow-rbp: A library for packing rectangles into two-dimensional finite bins.
- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| src | ||
| tests | ||
| .gitignore | ||
| AUTHORS | ||
| Cargo.lock | ||
| Cargo.toml | ||
| cliff.toml | ||
| LICENSE | ||
| README.md | ||
flow-rbp
flow-rbp is a library for packing rectangles into two-dimensional finite bins
using different heuristic methods for placement.
The two-dimensional rectangle bin packing is a classical problem in
combinatorial optimization. In this problem, one is given a sequence of
rectangles (R1, R2, ... Rn), Ri = (wi, hi) and the task is to find a packing
of these items into a minimum number of bins of size (W, H). No two
rectangles may intersect or be contained inside one another. This library uses
an algorithm sometimes referred as The Maximal Rectangles ALgorithm. This
algorithm stores a list of free rectangles that represents the free area of the
bin.
Usage
Add this to your Cargo.toml:
[dependencies]
flow-rbp = { git = "https://luflow.net/git/hfsoulz/flow-rbp.git", tag = "v0.1.0" }
Then:
use flow_rbp::FreeRectHeuristic;
use flow_rbp::RectsBinPack;
// create a new bin of size 32x32 which allows rotation:
let mut rbp = RectsBinPack::new(32, 32, true).unwrap();
// make sure occupancy is zero:
assert_eq!(rbp.get_occupancy(), 0.0);
// add a few rects that should fit:
assert_eq!(rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(), true);
assert_eq!(rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(), true);
assert_eq!(rbp.get_occupancy(), 0.5);
assert_eq!(rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(), true);
assert_eq!(rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(), true);
assert_eq!(rbp.get_occupancy(), 1.0);
// this rect will not fit and therefore returns None:
assert_eq!(rbp.insert(1, 1, FreeRectHeuristic::BottomLeft).is_none(), true);
LICENSE
See the file 'LICENSE' for license information.