![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/dvdoug/boxpacker/tests/Test/ |
<?php /** * Box packing (3D bin packing, knapsack problem). * * @author Doug Wright */ declare(strict_types=1); namespace DVDoug\BoxPacker\Test; use DVDoug\BoxPacker\Box; use DVDoug\BoxPacker\ConstrainedPlacementItem; use DVDoug\BoxPacker\PackedItem; use DVDoug\BoxPacker\PackedItemList; use function array_filter; use function iterator_to_array; class ConstrainedPlacementNoStackingTestItem extends TestItem implements ConstrainedPlacementItem { /** * Hook for user implementation of item-specific constraints, e.g. max <x> batteries per box. */ public function canBePacked( Box $box, PackedItemList $alreadyPackedItems, int $proposedX, int $proposedY, int $proposedZ, int $width, int $length, int $depth ): bool { $alreadyPackedType = array_filter( iterator_to_array($alreadyPackedItems, false), fn (PackedItem $item) => $item->getItem()->getDescription() === $this->getDescription() ); /** @var PackedItem $alreadyPacked */ foreach ($alreadyPackedType as $alreadyPacked) { if ( $alreadyPacked->getZ() + $alreadyPacked->getDepth() === $proposedZ && $proposedX >= $alreadyPacked->getX() && $proposedX <= ($alreadyPacked->getX() + $alreadyPacked->getWidth()) && $proposedY >= $alreadyPacked->getY() && $proposedY <= ($alreadyPacked->getY() + $alreadyPacked->getLength())) { return false; } } return true; } }