From cad1df2f58269d1b64167bbc155005bcfd3c555c Mon Sep 17 00:00:00 2001 From: mfranz Date: Mon, 3 Mar 2008 11:57:45 +0000 Subject: [PATCH] minor improvements (show busy cursor, etc.) --- utils/Modeller/uv_pack.py | 43 +++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/utils/Modeller/uv_pack.py b/utils/Modeller/uv_pack.py index 64fd6c370..6cd1918ed 100644 --- a/utils/Modeller/uv_pack.py +++ b/utils/Modeller/uv_pack.py @@ -50,25 +50,26 @@ def pack(): if not image: raise Abort('No texture image selected') - imagesize = image.getSize() - if imagesize[0] != imagesize[1]: + imgwidth, imgheight = image.getSize() + if imgwidth != imgheight: Blender.Draw.PupMenu("Warning%t|Image isn't a square!") - gap = (float(GAP) / imagesize[0], float(GAP) / imagesize[1]) - margin = (float(MARGIN) / imagesize[0] - gap[0] * 0.5, float(MARGIN) / imagesize[1] - gap[1] * 0.5) - + gap = (float(GAP) / imgwidth, float(GAP) / imgheight) + margin = (float(MARGIN) / imgwidth - gap[0] * 0.5, float(MARGIN) / imgheight - gap[1] * 0.5) def drawrect(x0, y0, x1, y1, color = (255, 255, 255, 255)): - x0 *= imagesize[0] - y0 *= imagesize[1] - x1 *= imagesize[0] - y1 *= imagesize[1] + x0 *= imgwidth + x1 *= imgwidth + y0 *= imgheight + y1 *= imgheight for u in range(int(x0 + 0.5), int(x1 - 0.5)): for v in range(int(y0 + 0.5), int(y1 - 0.5)): image.setPixelI(u, v, color) + boxes = [] meshes = {} + BIG = 1<<30 Blender.Window.DrawProgressBar(0.0, "packing") for o in Blender.Scene.GetCurrent().objects.selected: if o.type != "Mesh": @@ -83,8 +84,8 @@ def pack(): meshes[mesh.name] = True print "\tobject '%s'" % o.name - xmin = ymin = 1000.0 - xmax = ymax = -1000.0 + xmin = ymin = BIG + xmax = ymax = -BIG for f in mesh.faces: for p in f.uv: xmin = min(xmin, p[0]) @@ -94,21 +95,22 @@ def pack(): width = xmax - xmin height = ymax - ymin - boxes.append([0, 0, width + gap[0], height + gap[1], xmin, ymin, mesh, o.name]) + boxes.append([0, 0, width + gap[0], height + gap[1], xmin, ymin, mesh]) if not boxes: raise Abort('No mesh objects selected') - boxsize = Blender.Geometry.BoxPack2D(boxes) - xscale = (1.0 - 2.0 * margin[0]) / max(boxsize[0], boxsize[1]) - yscale = (1.0 - 2.0 * margin[1]) / max(boxsize[0], boxsize[1]) + boxwidth, boxheight = Blender.Geometry.BoxPack2D(boxes) + boxmax = max(boxwidth, boxheight) + xscale = (1.0 - 2.0 * margin[0]) / boxmax + yscale = (1.0 - 2.0 * margin[1]) / boxmax Blender.Window.DrawProgressBar(0.2, "Erasing texture") drawrect(0, 0, 1, 1) # erase texture for box in boxes: - xmin = ymin = 1000.0 - xmax = ymax = -1000.0 + xmin = ymin = BIG + xmax = ymax = -BIG for f in box[6].faces: for p in f.uv: p[0] = (p[0] - box[4] + box[0] + gap[0] * 0.5 + margin[0]) * xscale @@ -121,6 +123,9 @@ def pack(): drawrect(xmin, ymin, xmax, ymax, (random.randint(128, 255), random.randint(128, 255), random.randint(128, 255), 255)) + box[6].update() + + Blender.Window.RedrawAll() Blender.Window.DrawProgressBar(1.0, "Finished") @@ -128,15 +133,17 @@ def pack(): editmode = Blender.Window.EditMode() if editmode: Blender.Window.EditMode(0) +Blender.Window.WaitCursor(1) try: print "box packing ..." pack() print "done\n" except Abort, e: + print "Error:", e.msg, " -> aborting ...\n" Blender.Draw.PupMenu("Error%t|" + e.msg) - print "Error:", e.msg, " -> aborting ...\n" +Blender.Window.WaitCursor(0) if editmode: Blender.Window.EditMode(1)