Takes a list of 2D boxes and packs them into a square. Each box in
boxlist must be a list of at least 4 items - [x,y,w,h], after running
this script, the X and Y values in each box will be moved to packed, non
overlapping locations.
Example:
# Make 500 random boxes, pack them and make a mesh from it
from Blender import Geometry, Scene, Mesh
import random
boxes = []
for i in xrange(500):
boxes.append( [0,0, random.random()+0.1, random.random()+0.1] )
boxsize = Geometry.BoxPack2D(boxes)
print 'BoxSize', boxsize
me = Mesh.New()
for x in boxes:
me.verts.extend([(x[0],x[1], 0), (x[0],x[1]+x[3], 0), (x[0]+x[2],x[1]+x[3], 0), (x[0]+x[2],x[1], 0) ])
v1= me.verts[-1]
v2= me.verts[-2]
v3= me.verts[-3]
v4= me.verts[-4]
me.faces.extend([(v1,v2,v3,v4)])
scn = Scene.GetCurrent()
scn.objects.new(me)
- Returns: tuple
- a tuple pair - (width, height) of all the packed boxes.
Note:
Each boxlist item can be longer then 4, the extra items are
ignored and stay untouched.
|