textile-pack
Version:
A typescript implementation of the bin-packing problem specifically for textile applications where the width is fixed
75 lines (56 loc) • 1.74 kB
Markdown
Typescript implementation of the binary tree bin-packing algorithm optimized for problems where the width is fixed but the height is not, such as cutting pieces out of textiles like carpet.
Pass it:
1. an array of items that each have a numeric `height` and `width`, and
1. a `width` value for the containing piece
and it will return a cutting plan and dimensions for the smallest containing piece possible.
```
npm install textile-pack
```
```typescript
import { packItemsIntoWidth } from 'textile-pack';
const items = [
{
id: 'p1',
height: 5,
width: 2,
},
{
id: 'p2',
height: 3,
width: 2,
},
{
id: 'p3',
height: 2,
width: 2,
},
];
// Find the cutting plan for a width of 4
const { height, width, packedItems } = packItemsIntoWidth(items, 4);
// height and width will be the overall dimensions needed to fit all the items
// packedItems will be an array of objects like
{
item: {} // the original item,
height: 5, // height of the item
width: 2, // width of the item
x: 0, // x position in the layout
y: 0, // y position in the layout
},
/*
For this example, the returned layout will be
x ________2________4
y| | |
| p1 | p2 |
3| |________|
| | p3 |
5|________|________|
*/
```
Builds on top of [this code][enochriese] by Enoch Riese, [this code][bryanburgers] by Bryan Burgers, and [this code][jakesgordon] by Jake Gordon.
[]: https://github.com/eriese/bin-pack-with-constraints
[]: https://github.com/jakesgordon/bin-packing
[]: http://codeincomplete.com/posts/2011/5/7/bin_packing/
[]: https://github.com/bryanburgers/bin-pack