1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
# Copyright (c) 2022, Manfred Moitzi
# License: MIT License
# This is the example provided by the py3dbp package:
from typing import List
import ezdxf
from ezdxf import colors
from ezdxf.addons import binpacking as bp
SMALL_ENVELOPE = ("small-envelope", 11.5, 6.125, 0.25, 10)
LARGE_ENVELOPE = ("large-envelope", 15.0, 12.0, 0.75, 15)
SMALL_BOX = ("small-box", 8.625, 5.375, 1.625, 70.0)
MEDIUM_BOX = ("medium-box", 11.0, 8.5, 5.5, 70.0)
MEDIUM_BOX2 = ("medium-box-2", 13.625, 11.875, 3.375, 70.0)
LARGE_BOX = ("large-box", 12.0, 12.0, 5.5, 70.0)
LARGE_BOX2 = ("large-box-2", 23.6875, 11.75, 3.0, 70.0)
ALL_BINS = [
SMALL_ENVELOPE,
LARGE_ENVELOPE,
SMALL_BOX,
MEDIUM_BOX,
MEDIUM_BOX2,
LARGE_BOX,
LARGE_BOX2,
]
def build_packer():
packer = bp.Packer()
packer.add_item("50g [powder 1]", 3.9370, 1.9685, 1.9685, 1)
packer.add_item("50g [powder 2]", 3.9370, 1.9685, 1.9685, 2)
packer.add_item("50g [powder 3]", 3.9370, 1.9685, 1.9685, 3)
packer.add_item("250g [powder 4]", 7.8740, 3.9370, 1.9685, 4)
packer.add_item("250g [powder 5]", 7.8740, 3.9370, 1.9685, 5)
packer.add_item("250g [powder 6]", 7.8740, 3.9370, 1.9685, 6)
packer.add_item("250g [powder 7]", 7.8740, 3.9370, 1.9685, 7)
packer.add_item("250g [powder 8]", 7.8740, 3.9370, 1.9685, 8)
packer.add_item("250g [powder 9]", 7.8740, 3.9370, 1.9685, 9)
return packer
def make_doc():
doc = ezdxf.new()
doc.layers.add("FRAME", color=colors.YELLOW)
doc.layers.add("ITEMS")
doc.layers.add("TEXT")
return doc
def main(filename):
bins: List[bp.Bin] = []
for box in ALL_BINS:
packer = build_packer()
packer.add_bin(*box)
packer.pack(bp.PickStrategy.BIGGER_FIRST)
bins.extend(packer.bins)
doc = make_doc()
bp.export_dxf(doc.modelspace(), bins, offset=(0, 20, 0))
doc.saveas(filename)
if __name__ == "__main__":
main("py3dbp_example.dxf")
|