braienstorm / bin-packer
2D bin packing for PHP
v1.0.3
2023-03-07 06:49 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
- ext-imagick: *
Suggests
- ext-imagick: To use the visualizer
This package is auto-updated.
Last update: 2025-04-07 11:17:15 UTC
README
I made it for a metal cutting company. This code selects the appropriate raw metal sheets for cutting. Original idea Padam87 link: https://github.com/Padam87/bin-packer 2D bin packing for PHP, with rotation.
Usage
Basic
$Boxes = [ new Block(100, 100), new Block(300, 100), ]; $bin = new Bin(1500,3000); $bin->insertManyBlock($Boxes);
How to get unused Boxes
You will get all unused Block as a array.
$unusedBoxes = $bestBin->getUnpackedBlocks()
How to get used boxes
You can get the node tree and evaluate it with a function
$node = $bin->getNode(); getUsedBlock($node); function getUsedBlock(\Node $node) { if($node == null) return; if($node->isUsed()) { print_r($node->getBlock()); $this->getUsedBlock($node->getRight()); $this->getUsedBlock($node->getDown()); } }
How to get score
$sc = $bestBin->getStatistic(); Array ( [score] => 0.72624 // [used] / ([binWidth]*[binHeight]) [used] => 2269500 // used arrea [free] => 855500 // free arrea [binWidth] => 2500 [binHeight] => 1250 )
Visualiser
$visualizer = new Visualizer(); $image = $visualizer->visualize($bin); $image->setFormat('jpg'); $image->writeImage('bin.jpg');