]> git.mxchange.org Git - flightgear.git/commitdiff
minor improvements (show busy cursor, etc.)
authormfranz <mfranz>
Mon, 3 Mar 2008 11:57:45 +0000 (11:57 +0000)
committermfranz <mfranz>
Mon, 3 Mar 2008 11:57:45 +0000 (11:57 +0000)
utils/Modeller/uv_pack.py

index 64fd6c370dc47c3e052137541d5e3c96119caca7..6cd1918ed9ee7b8ee6e44f5d4de8300ed9d758b8 100644 (file)
@@ -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)