{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":4835,"status":"ok","timestamp":1722353446107,"user":{"displayName":"petr pinc","userId":"11984006941425695354"},"user_tz":-120},"id":"mELko5iwOzHO","outputId":"6429e990-ee60-4748-c0e6-bd5c90009633"},"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: rectpack in /usr/local/lib/python3.10/dist-packages (0.2.2)\n"]}],"source":["!pip install rectpack"]},{"cell_type":"code","source":[],"metadata":{"id":"hTAZyhARs08j"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"4PLC3kZuQ0_o"},"outputs":[],"source":["from rectpack import newPacker, PackingMode\n","import rectpack.packer\n","\n","\n","rectangles = [(1200, 800), (1200, 800), (1200, 800),(1200, 1000), (1200, 1000), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 800), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200), (1200, 1200)]\n","bins = [(13600, 2400), (13600, 2400)]\n","\n","packer1 = newPacker(mode=PackingMode.Offline, bin_algo=rectpack.packer.PackingBin.Global, pack_algo=rectpack.GuillotineBlsfSas, sort_algo=rectpack.packer.SORT_NONE, rotation=True)\n","\n","# Add the rectangles to packing queue\n","for r in rectangles:\n","\tpacker1.add_rect(*r) # * removes brackets and commas\n","\n","# Add the bins where the rectangles will be placed\n","for b in bins:\n","\tpacker1.add_bin(*b)\n","\n","# Start packing\n","packer1.pack()"]},{"cell_type":"markdown","source":[],"metadata":{"id":"v7Lvvx2rtBCS"}},{"cell_type":"markdown","metadata":{"id":"NND3e2BElLS2"},"source":["# Nová sekce"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":323,"status":"ok","timestamp":1722355877480,"user":{"displayName":"petr pinc","userId":"11984006941425695354"},"user_tz":-120},"id":"6RDV3GsBQ4-Q","outputId":"f18adfc8-1317-4d14-ec01-f05772deb739"},"outputs":[{"output_type":"stream","name":"stdout","text":["22\n","<rectpack.packer.PackerGlobal object at 0x786b88619fc0>\n","R(0, 0, 1200, 800)\n"]}],"source":["# Obtain number of bins used for packing\n","nbins = len(packer1)\n","\n","# Index first bin\n","abin = packer1[0]\n","\n","# Bin dimmensions (bins can be reordered during packing)\n","width, height = abin.width, abin.height\n","\n","# Number of rectangles packed into first bin\n","nrect = len(packer1[0])\n","\n","print(nrect)\n","print(packer1)\n","\n","# Second bin first rectangle - funguje jenom kdyz tam neco je. Kdyz se vsechno vejde do prvniho binu, je potreba upravit indexy.\n","rect = packer1[0][0]\n","\n","# rect is a Rectangle object\n","x = rect.x # rectangle bottom-left x coordinate\n","y = rect.y # rectangle bottom-left y coordinate\n","w = rect.width\n","h = rect.height\n","\n","print(rect)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"h2s3oBF4TkWv"},"outputs":[],"source":["# Full rectangle list\n","all_rects = packer1.rect_list()\n","for rect in all_rects:\n","\tb, x, y, w, h, rid = rect\n","\n","# b - Bin index\n","# x - Rectangle bottom-left corner x coordinate\n","# y - Rectangle bottom-left corner y coordinate\n","# w - Rectangle width\n","# h - Rectangle height\n","# rid - User asigned rectangle id or None"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"QgsBnKB1StX-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1722355880709,"user_tz":-120,"elapsed":291,"user":{"displayName":"petr pinc","userId":"11984006941425695354"}},"outputId":"8b61947f-392b-4578-e78c-0c579108fdc0"},"outputs":[{"output_type":"stream","name":"stdout","text":["None\n","R(0, 0, 1200, 800)\n","R(0, 800, 800, 1200)\n","R(1200, 0, 1200, 800)\n","R(1200, 800, 1000, 1200)\n","R(2400, 0, 1200, 1000)\n","R(2400, 1000, 1200, 1200)\n","R(3600, 0, 1200, 800)\n","R(3600, 800, 800, 1200)\n","R(4800, 0, 1200, 800)\n","R(4800, 800, 800, 1200)\n","R(6000, 0, 1200, 800)\n","R(6000, 800, 800, 1200)\n","R(7200, 0, 1200, 800)\n","R(7200, 800, 800, 1200)\n","R(8400, 0, 1200, 800)\n","R(8400, 800, 800, 1200)\n","R(9600, 0, 1200, 800)\n","R(9600, 800, 800, 1200)\n","R(10800, 0, 1200, 800)\n","R(10800, 800, 800, 1200)\n","R(12000, 0, 800, 1200)\n","R(12000, 1200, 1200, 1200)\n","None\n","R(0, 0, 1200, 1200)\n","R(0, 1200, 1200, 1200)\n","R(1200, 0, 1200, 1200)\n","R(1200, 1200, 1200, 1200)\n","R(2400, 0, 1200, 1200)\n","R(2400, 1200, 1200, 1200)\n","R(3600, 0, 1200, 1200)\n","R(3600, 1200, 1200, 1200)\n","R(4800, 0, 1200, 1200)\n"]}],"source":["# vypis vysledku\n","for abin in packer1:\n","  print(abin.bid) # Bin id if it has one\n","  for rect in abin:\n","    print(rect)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":253,"status":"ok","timestamp":1722355883021,"user":{"displayName":"petr pinc","userId":"11984006941425695354"},"user_tz":-120},"id":"0BTUxRdHTpPO","outputId":"6a96d46c-00c1-476c-97ce-86191c435af2"},"outputs":[{"output_type":"stream","name":"stdout","text":["[(0, 0, 0, 1200, 800, None), (0, 0, 800, 800, 1200, None), (0, 1200, 0, 1200, 800, None), (0, 1200, 800, 1000, 1200, None), (0, 2400, 0, 1200, 1000, None), (0, 2400, 1000, 1200, 1200, None), (0, 3600, 0, 1200, 800, None), (0, 3600, 800, 800, 1200, None), (0, 4800, 0, 1200, 800, None), (0, 4800, 800, 800, 1200, None), (0, 6000, 0, 1200, 800, None), (0, 6000, 800, 800, 1200, None), (0, 7200, 0, 1200, 800, None), (0, 7200, 800, 800, 1200, None), (0, 8400, 0, 1200, 800, None), (0, 8400, 800, 800, 1200, None), (0, 9600, 0, 1200, 800, None), (0, 9600, 800, 800, 1200, None), (0, 10800, 0, 1200, 800, None), (0, 10800, 800, 800, 1200, None), (0, 12000, 0, 800, 1200, None), (0, 12000, 1200, 1200, 1200, None), (1, 0, 0, 1200, 1200, None), (1, 0, 1200, 1200, 1200, None), (1, 1200, 0, 1200, 1200, None), (1, 1200, 1200, 1200, 1200, None), (1, 2400, 0, 1200, 1200, None), (1, 2400, 1200, 1200, 1200, None), (1, 3600, 0, 1200, 1200, None), (1, 3600, 1200, 1200, 1200, None), (1, 4800, 0, 1200, 1200, None)]\n"]}],"source":["# taky vypis vysledku\n","\n","result = packer1.rect_list()\n","print(result)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":700,"status":"ok","timestamp":1722355884682,"user":{"displayName":"petr pinc","userId":"11984006941425695354"},"user_tz":-120},"id":"AlVOoSKAd_do","outputId":"6034ee6e-5a7a-4f06-b2ad-d6522f0c3dab"},"outputs":[{"output_type":"stream","name":"stdout","text":["2\n","None\n","R(0, 0, 1200, 800)\n","R(0, 800, 800, 1200)\n","R(1200, 0, 1200, 800)\n","R(1200, 800, 1000, 1200)\n","R(2400, 0, 1200, 1000)\n","R(2400, 1000, 1200, 1200)\n","R(3600, 0, 1200, 800)\n","R(3600, 800, 800, 1200)\n","R(4800, 0, 1200, 800)\n","R(4800, 800, 800, 1200)\n","R(6000, 0, 1200, 800)\n","R(6000, 800, 800, 1200)\n","R(7200, 0, 1200, 800)\n","R(7200, 800, 800, 1200)\n","R(8400, 0, 1200, 800)\n","R(8400, 800, 800, 1200)\n","R(9600, 0, 1200, 800)\n","R(9600, 800, 800, 1200)\n","R(10800, 0, 1200, 800)\n","R(10800, 800, 800, 1200)\n","R(12000, 0, 800, 1200)\n","R(12000, 1200, 1200, 1200)\n","None\n","R(0, 0, 1200, 1200)\n","R(0, 1200, 1200, 1200)\n","R(1200, 0, 1200, 1200)\n","R(1200, 1200, 1200, 1200)\n","R(2400, 0, 1200, 1200)\n","R(2400, 1200, 1200, 1200)\n","R(3600, 0, 1200, 1200)\n","R(3600, 1200, 1200, 1200)\n","R(4800, 0, 1200, 1200)\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 0 Axes>"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 1360x240 with 1 Axes>"],"image/png":"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+0x6erpZt26d2bZtm/H7/cbv91vjrbf4HTdunKmqqjKrV682l19++Rlv8Ttz5kyzd+9eU1xczC1+EXJXI2PoNbSPrVu3mujoaPOLX/zC7Nu3zyxevNjEx8eb1157zap5/PHHTWJiovn9739vduzYYW655ZYz3op12LBhpqKiwmzatMlcddVVIbfHrKurM16v19x5551m165dZunSpSY+Pp5b/HYhU6ZMMVdccYV1O+k333zTJCcnm1mzZlk19BouxrFjx8z27dvN9u3bjSTz9NNPm+3bt1t3knGqrzZv3myio6PNk08+afbu3WsefvhhbvHbyZyr15qamszNN99sevfubaqqqkL+VvjyHYroNZxPpwtejDHmhRdeMOnp6cblcplrr73WbNmyJdxTQgcm6YyPV155xao5ceKE+dd//VfTo0cPEx8fb773ve+ZTz/9NOR9/va3v5kJEyaYuLg4k5ycbB588EHT3NwcUvPuu++aoUOHGpfLZfr06ROyD3RNXw1e6DW0lz/+8Y/mmmuuMW6322RlZZmXXnopZLylpcX8/Oc/N16v17jdbjN27FhTXV0dUnPkyBEzefJk061bN+PxeMzdd99tjh07FlLzwQcfmFGjRhm3222uuOIK8/jjj9t+bOg4gsGguf/++016erqJjY01ffr0MT/72c9C/iCh13Ax3n333TP+fjZlyhRjjLN99cYbb5irr77auFwuM3DgQPP222/bdtxw3rl6bf/+/Wf9W+Hdd9+13oNew/lEGGOMc+fXAAAAAAAAdB2d6hovAAAAAAAAHQnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGzy/4oEkoqkiVseAAAAAElFTkSuQmCC\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 0 Axes>"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 1360x240 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABF4AAADkCAYAAAChWuD/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAi4UlEQVR4nO3df1RUdf7H8Rc/nAHSGURjRhJIs/z9KyycUreSIxrbj82zpVFZubm10Ga06noq81tbtva7lnTdrayzmj/OKSszjTClDDFJ8ueSbRaWDWwajFgCyuf7xx7uNqUWLneG4Pk4557j3M+bO+97z/uAvM5wb4QxxggAAAAAAAAtLjLcDQAAAAAAALRVBC8AAAAAAAA2IXgBAAAAAACwCcELAAAAAACATQheAAAAAAAAbELwAgAAAAAAYBOCFwAAAAAAAJtEh7sBuzQ2Nmrfvn3q1KmTIiIiwt0OAAAAAABoQ4wxOnjwoJKSkhQZefzPtbTZ4GXfvn1KTk4OdxsAAAAAAKAN27t3r7p3737c9TYbvHTq1EmSFD96ihyJPcPcTftw+NMPFCheps6ZueqQcPyhQ8vhmoce1zz0Gg58rq/X/EXr16/XkCFDwt0OAAAAIEkKBAJKTk628ofjabPBS9OfFzkSeyo2ZUCYu2kfjh78tyTJ6e0lp7dXmLtpH7jmocc1D71IR4wkqWPHjnK5XGHuBgAAAAj2Y7c34ea6AAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJs0KXubMmaNzzjlHnTp1UmJioi6//HKVl5cH1Rw+fFg5OTnq0qWLOnbsqPHjx6uysjKopqKiQllZWYqLi1NiYqKmTZumI0eOBNWsW7dOZ599tpxOp3r16qWFCxee3BkCAAAAAACESbOCl/Xr1ysnJ0cbN25UQUGBGhoaNGbMGB06dMiquf322/Xaa69p+fLlWr9+vfbt26crrrjCWj969KiysrJUX1+v9957T88//7wWLlyoWbNmWTV79uxRVlaWLrzwQpWVlWnq1Kn6zW9+ozVr1rTAKQMAAAAAAIRGdHOKV69eHfR64cKFSkxMVGlpqUaNGqWamho988wzWrx4sS666CJJ0nPPPae+fftq48aNGj58uN58803t3LlTb731ljwej4YMGaL77rtPM2bM0OzZs+VwODR//nz16NFDjzzyiCSpb9++evfdd/XYY48pMzOzhU4dAAAAAADAXv/TPV5qamokSQkJCZKk0tJSNTQ0KCMjw6rp06ePUlJSVFxcLEkqLi7WwIED5fF4rJrMzEwFAgHt2LHDqvnuMZpqmo5xLHV1dQoEAkEbAAAAAABAOJ108NLY2KipU6fq/PPP14ABAyRJfr9fDodD8fHxQbUej0d+v9+q+W7o0rTetHaimkAgoG+//faY/cyZM0dut9vakpOTT/bUAAAAAAAAWsRJBy85OTnavn27lixZ0pL9nLSZM2eqpqbG2vbu3RvulgAAAAAAQDvXrHu8NMnNzdXKlStVVFSk7t27W/u9Xq/q6+tVXV0d9KmXyspKeb1eq2bTpk1Bx2t66tF3a77/JKTKykq5XC7FxsYesyen0ymn03kypwMAAAAAAGCLZn3ixRij3Nxcvfzyy1q7dq169OgRtJ6WlqYOHTqosLDQ2ldeXq6Kigr5fD5Jks/n07Zt21RVVWXVFBQUyOVyqV+/flbNd4/RVNN0DAAAAAAAgJ+DZn3iJScnR4sXL9Yrr7yiTp06Wfdkcbvdio2Nldvt1uTJk5WXl6eEhAS5XC7deuut8vl8Gj58uCRpzJgx6tevn6699lrNnTtXfr9fd911l3JycqxPrNx88836y1/+ounTp+vGG2/U2rVrtWzZMr3++ustfPoAAAAAAAD2adYnXubNm6eamhpdcMEF6tatm7UtXbrUqnnsscf0y1/+UuPHj9eoUaPk9Xr10ksvWetRUVFauXKloqKi5PP5dM011+i6667Tvffea9X06NFDr7/+ugoKCjR48GA98sgj+vvf/86jpAEAAAAAwM9Ksz7xYoz50ZqYmBjl5+crPz//uDWpqalatWrVCY9zwQUXaMuWLc1pDwAAAAAAoFU56acaAQAAAAAA4MQIXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbNDt4KSoq0iWXXKKkpCRFRERoxYoVQevXX3+9IiIigraxY8cG1Rw4cEDZ2dlyuVyKj4/X5MmTVVtbG1SzdetWjRw5UjExMUpOTtbcuXObf3YAAAAAAABh1Ozg5dChQxo8eLDy8/OPWzN27Fh9+eWX1vbiiy8GrWdnZ2vHjh0qKCjQypUrVVRUpClTpljrgUBAY8aMUWpqqkpLS/XQQw9p9uzZWrBgQXPbBQAAAAAACJvo5n7BuHHjNG7cuBPWOJ1Oeb3eY67t2rVLq1ev1vvvv69hw4ZJkp566ildfPHFevjhh5WUlKRFixapvr5ezz77rBwOh/r376+ysjI9+uijQQENAAAAAABAa2bLPV7WrVunxMRE9e7dW7fccov2799vrRUXFys+Pt4KXSQpIyNDkZGRKikpsWpGjRolh8Nh1WRmZqq8vFxff/31Md+zrq5OgUAgaAMAAAAAAAinFg9exo4dqxdeeEGFhYX685//rPXr12vcuHE6evSoJMnv9ysxMTHoa6Kjo5WQkCC/32/VeDyeoJqm10013zdnzhy53W5rS05ObulTAwAAAAAAaJZm/6nRj5kwYYL174EDB2rQoEE644wztG7dOo0ePbql384yc+ZM5eXlWa8DgQDhCwAAAAAACCvbHyfds2dPde3aVR9//LEkyev1qqqqKqjmyJEjOnDggHVfGK/Xq8rKyqCaptfHu3eM0+mUy+UK2gAAAAAAAMLJ9uDl888/1/79+9WtWzdJks/nU3V1tUpLS62atWvXqrGxUenp6VZNUVGRGhoarJqCggL17t1bnTt3trtlAAAAAACAFtHs4KW2tlZlZWUqKyuTJO3Zs0dlZWWqqKhQbW2tpk2bpo0bN+rTTz9VYWGhLrvsMvXq1UuZmZmSpL59+2rs2LG66aabtGnTJm3YsEG5ubmaMGGCkpKSJElXX321HA6HJk+erB07dmjp0qV64okngv6UCAAAAAAAoLVrdvCyefNmDR06VEOHDpUk5eXlaejQoZo1a5aioqK0detWXXrppTrrrLM0efJkpaWl6Z133pHT6bSOsWjRIvXp00ejR4/WxRdfrBEjRmjBggXWutvt1ptvvqk9e/YoLS1Nd9xxh2bNmsWjpAEAAAAAwM9Ks2+ue8EFF8gYc9z1NWvW/OgxEhIStHjx4hPWDBo0SO+8805z2wMAAAAAAGg1bL/HCwAAAAAAQHtF8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsEl0uBuwW8OBzxXpiAl3G+3CkZpKSVLD/r1h7qT94JqHHtc89Jqu9a5du8LcSfvStWtXpaSkhLsNAACAn70IY4wJdxN2CAQCcrvd4W6j/YmIkNrmSLVeXPPQ45qHHtc85GJi41T+z12ELwAAAMfRlDvU1NTI5XIdt67Nf+LF5btSHbokh7uNdqHui52q3fKG3COvUbTbE+522gWueehxzUOv6Zp3+eUdfD8PkYb9e7V/5SP66quvCF4AAAD+R20+eIk5/WzFpgwIdxvtRu2WNxTbc5ic3l7hbqXd4JqHHtc89Gq3vKEOXZK55gAAAPjZ4ea6AAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJs0OXoqKinTJJZcoKSlJERERWrFiRdC6MUazZs1St27dFBsbq4yMDO3evTuo5sCBA8rOzpbL5VJ8fLwmT56s2traoJqtW7dq5MiRiomJUXJysubOndv8swMAAAAAAAijZgcvhw4d0uDBg5Wfn3/M9blz5+rJJ5/U/PnzVVJSolNOOUWZmZk6fPiwVZOdna0dO3aooKBAK1euVFFRkaZMmWKtBwIBjRkzRqmpqSotLdVDDz2k2bNna8GCBSdxigAAAAAAAOER3dwvGDdunMaNG3fMNWOMHn/8cd1111267LLLJEkvvPCCPB6PVqxYoQkTJmjXrl1avXq13n//fQ0bNkyS9NRTT+niiy/Www8/rKSkJC1atEj19fV69tln5XA41L9/f5WVlenRRx8NCmgAAAAAAABasxa9x8uePXvk9/uVkZFh7XO73UpPT1dxcbEkqbi4WPHx8VboIkkZGRmKjIxUSUmJVTNq1Cg5HA6rJjMzU+Xl5fr666+P+d51dXUKBAJBGwAAAAAAQDi1aPDi9/slSR6PJ2i/x+Ox1vx+vxITE4PWo6OjlZCQEFRzrGN89z2+b86cOXK73daWnJz8v58QAAAAAADA/6DNPNVo5syZqqmpsba9e/eGuyUAAAAAANDOtWjw4vV6JUmVlZVB+ysrK601r9erqqqqoPUjR47owIEDQTXHOsZ33+P7nE6nXC5X0AYAAAAAABBOLRq89OjRQ16vV4WFhda+QCCgkpIS+Xw+SZLP51N1dbVKS0utmrVr16qxsVHp6elWTVFRkRoaGqyagoIC9e7dW507d27JlgEAAAAAAGzT7OCltrZWZWVlKisrk/SfG+qWlZWpoqJCERERmjp1qv70pz/p1Vdf1bZt23TdddcpKSlJl19+uSSpb9++Gjt2rG666SZt2rRJGzZsUG5uriZMmKCkpCRJ0tVXXy2Hw6HJkydrx44dWrp0qZ544gnl5eW12IkDAAAAAADYrdmPk968ebMuvPBC63VTGDJp0iQtXLhQ06dP16FDhzRlyhRVV1drxIgRWr16tWJiYqyvWbRokXJzczV69GhFRkZq/PjxevLJJ611t9utN998Uzk5OUpLS1PXrl01a9YsHiUNAAAAAAB+VpodvFxwwQUyxhx3PSIiQvfee6/uvffe49YkJCRo8eLFJ3yfQYMG6Z133mluewAAAAAAAK1Gm3mqEQAAAAAAQGtD8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYpMWDl9mzZysiIiJo69Onj7V++PBh5eTkqEuXLurYsaPGjx+vysrKoGNUVFQoKytLcXFxSkxM1LRp03TkyJGWbhUAAAAAAMBW0XYctH///nrrrbf++ybR/32b22+/Xa+//rqWL18ut9ut3NxcXXHFFdqwYYMk6ejRo8rKypLX69V7772nL7/8Utddd506dOigBx54wI52AQAAAAAAbGFL8BIdHS2v1/uD/TU1NXrmmWe0ePFiXXTRRZKk5557Tn379tXGjRs1fPhwvfnmm9q5c6feeusteTweDRkyRPfdd59mzJih2bNny+Fw2NEyAAAAAABAi7PlHi+7d+9WUlKSevbsqezsbFVUVEiSSktL1dDQoIyMDKu2T58+SklJUXFxsSSpuLhYAwcOlMfjsWoyMzMVCAS0Y8eO475nXV2dAoFA0AYAAAAAABBOLR68pKena+HChVq9erXmzZunPXv2aOTIkTp48KD8fr8cDofi4+ODvsbj8cjv90uS/H5/UOjStN60djxz5syR2+22tuTk5JY9MQAAAAAAgGZq8T81GjdunPXvQYMGKT09XampqVq2bJliY2Nb+u0sM2fOVF5envU6EAgQvgAAAAAAgLCy/XHS8fHxOuuss/Txxx/L6/Wqvr5e1dXVQTWVlZXWPWG8Xu8PnnLU9PpY941p4nQ65XK5gjYAAAAAAIBwsj14qa2t1b/+9S9169ZNaWlp6tChgwoLC6318vJyVVRUyOfzSZJ8Pp+2bdumqqoqq6agoEAul0v9+vWzu10AAAAAAIAW0+J/avSHP/xBl1xyiVJTU7Vv3z7dc889ioqK0sSJE+V2uzV58mTl5eUpISFBLpdLt956q3w+n4YPHy5JGjNmjPr166drr71Wc+fOld/v11133aWcnBw5nc6WbhcAAAAAAMA2LR68fP7555o4caL279+vU089VSNGjNDGjRt16qmnSpIee+wxRUZGavz48aqrq1NmZqaefvpp6+ujoqK0cuVK3XLLLfL5fDrllFM0adIk3XvvvS3dKgAAAAAAgK1aPHhZsmTJCddjYmKUn5+v/Pz849akpqZq1apVLd0aAAAAAABASNl+jxcAAAAAAID2iuAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANiF4AQAAAAAAsAnBCwAAAAAAgE0IXgAAAAAAAGxC8AIAAAAAAGATghcAAAAAAACbELwAAAAAAADYhOAFAAAAAADAJgQvAAAAAAAANmnVwUt+fr5OP/10xcTEKD09XZs2bQp3SwAAAAAAAD9Zqw1eli5dqry8PN1zzz364IMPNHjwYGVmZqqqqircrQEAAAAAAPwkrTZ4efTRR3XTTTfphhtuUL9+/TR//nzFxcXp2WefDXdrAAAAAAAAP0l0uBs4lvr6epWWlmrmzJnWvsjISGVkZKi4uPiYX1NXV6e6ujrrdU1NzX+OVfWJvc3C0rB/rySpzv+xGusPh7mb9oFrHnpc89Djmodew4HPJUm1tbUKBAJh7gYAAKB1avp/kjHmhHUR5scqwmDfvn067bTT9N5778nn81n7p0+frvXr16ukpOQHXzN79mz93//9XyjbBAAAAAAA7dzevXvVvXv34663yk+8nIyZM2cqLy/Pel1dXa3U1FRVVFTI7XaHsTO0dYFAQMnJydq7d69cLle420EbxqwhVJg1hAqzhlBh1hAqzFr7YozRwYMHlZSUdMK6Vhm8dO3aVVFRUaqsrAzaX1lZKa/Xe8yvcTqdcjqdP9jvdrsZeISEy+Vi1hASzBpChVlDqDBrCBVmDaHCrLUfP+WDHq3y5roOh0NpaWkqLCy09jU2NqqwsDDoT48AAAAAAABas1b5iRdJysvL06RJkzRs2DCde+65evzxx3Xo0CHdcMMN4W4NAAAAAADgJ2m1wctVV12lf//735o1a5b8fr+GDBmi1atXy+Px/KSvdzqduueee47550dAS2LWECrMGkKFWUOoMGsIFWYNocKs4Vha5VONAAAAAAAA2oJWeY8XAAAAAACAtoDgBQAAAAAAwCYELwAAAAAAADYheAEAAAAAALAJwQsAAAAAAIBN2mTwkp+fr9NPP10xMTFKT0/Xpk2bwt0SWrE5c+bonHPOUadOnZSYmKjLL79c5eXlQTWHDx9WTk6OunTpoo4dO2r8+PGqrKwMqqmoqFBWVpbi4uKUmJioadOm6ciRI0E169at09lnny2n06levXpp4cKFdp8eWrEHH3xQERERmjp1qrWPWUNL+eKLL3TNNdeoS5cuio2N1cCBA7V582Zr3RijWbNmqVu3boqNjVVGRoZ2794ddIwDBw4oOztbLpdL8fHxmjx5smpra4Nqtm7dqpEjRyomJkbJycmaO3duSM4PrcPRo0d19913q0ePHoqNjdUZZ5yh++67T999aCazhpNRVFSkSy65RElJSYqIiNCKFSuC1kM5V8uXL1efPn0UExOjgQMHatWqVS1+vgifE81aQ0ODZsyYoYEDB+qUU05RUlKSrrvuOu3bty/oGMwafpRpY5YsWWIcDod59tlnzY4dO8xNN91k4uPjTWVlZbhbQyuVmZlpnnvuObN9+3ZTVlZmLr74YpOSkmJqa2utmptvvtkkJyebwsJCs3nzZjN8+HBz3nnnWetHjhwxAwYMMBkZGWbLli1m1apVpmvXrmbmzJlWzSeffGLi4uJMXl6e2blzp3nqqadMVFSUWb16dUjPF63Dpk2bzOmnn24GDRpkbrvtNms/s4aWcODAAZOammquv/56U1JSYj755BOzZs0a8/HHH1s1Dz74oHG73WbFihXmww8/NJdeeqnp0aOH+fbbb62asWPHmsGDB5uNGzead955x/Tq1ctMnDjRWq+pqTEej8dkZ2eb7du3mxdffNHExsaav/71ryE9X4TP/fffb7p06WJWrlxp9uzZY5YvX246duxonnjiCauGWcPJWLVqlbnzzjvNSy+9ZCSZl19+OWg9VHO1YcMGExUVZebOnWt27txp7rrrLtOhQwezbds2268BQuNEs1ZdXW0yMjLM0qVLzT//+U9TXFxszj33XJOWlhZ0DGYNP6bNBS/nnnuuycnJsV4fPXrUJCUlmTlz5oSxK/ycVFVVGUlm/fr1xpj/fMPt0KGDWb58uVWza9cuI8kUFxcbY/7zDTsyMtL4/X6rZt68ecblcpm6ujpjjDHTp083/fv3D3qvq666ymRmZtp9SmhlDh48aM4880xTUFBgfvGLX1jBC7OGljJjxgwzYsSI4643NjYar9drHnroIWtfdXW1cTqd5sUXXzTGGLNz504jybz//vtWzRtvvGEiIiLMF198YYwx5umnnzadO3e2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\n"},"metadata":{}}],"source":["import matplotlib.pyplot as plt\n","from matplotlib.patches import Rectangle\n","\n","#define Matplotlib figure and axis\n","\n","print(len(packer1))\n","\n","for abin in packer1:\n","  print(abin.bid) # Bin id if it has one\n","  plt.figure()\n","  fig, ax = plt.subplots(figsize=(13.6,2.4))\n","  plt.xlim([0, 13600])\n","  plt.ylim([0, 2400])\n","  plt.plot()\n","  for rect in abin:\n","    print(rect)\n","    ax.add_patch(Rectangle((rect.x, rect.y), rect.width, rect.height, edgecolor='black'))\n","\n","#display plot\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"LvCEwM9gjDFi"},"source":[]}],"metadata":{"colab":{"provenance":[{"file_id":"1erqjizjdV9agiB1r8rlHYL-d1H2Gg1Uv","timestamp":1722681724795}]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}