diff options
author | Martin Poirier <theeth@yahoo.com> | 2007-07-23 05:12:07 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2007-07-23 05:12:07 +0400 |
commit | becc4feb5f8d3e30b5af0d6cc400a4c47e4fe163 (patch) | |
tree | c0ea59ddbf9ed55d91d22ec37ecebefb9ced2271 /release | |
parent | 3d0feeb4718e5a642778077d03eece3e53776fb9 (diff) |
Fix for #6946 Save UV layout broken for large wire sizes
This also helped me pinpoint a couple of off by one errors in the UV rasterizing code. One especially noteworthy was that all UV at 1.0 (on the 0..1 scale) didn't render properly.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/uv_export.py | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/release/scripts/uv_export.py b/release/scripts/uv_export.py index f32b5b4fc12..f73b7bc7b10 100644 --- a/release/scripts/uv_export.py +++ b/release/scripts/uv_export.py @@ -9,7 +9,7 @@ Tooltip: 'Export the UV face layout of the selected object to a .TGA or .SVG fil __author__ = "Martin 'theeth' Poirier" __url__ = ("http://www.blender.org", "http://blenderartists.org/") -__version__ = "2.4" +__version__ = "2.5" __bpydoc__ = """\ This script exports the UV face layout of the selected mesh object to @@ -96,6 +96,11 @@ Notes:<br>See change logs in scripts for a list of contributors. # Version 2.4 # Port from NMesh to Mesh by Daniel Salazar (zanqdo) # -------------------------- +# Version 2.5 +# Fixed some old off by one rasterizing errors (didn't render points at 1.0 in the UV scale properly). +# Fixed wire drawing for non 1 wire size (didn't wrap or stretch properly +# and would often raise exceptions) +# -------------------------- FullPython = False @@ -322,7 +327,7 @@ def UV_Export_TGA(vList, size, wsize, wrap, file): step = 0 - img = Buffer(size+1,size+1) + img = Buffer(size,size) if wrap: wrapSize = size @@ -333,15 +338,16 @@ def UV_Export_TGA(vList, size, wsize, wrap, file): for f in vList: for v in f: x = int(v[0] * size) - maxx = max (x, maxx) - minx = min (x, minx) + maxx = max (x + wsize - 1, maxx) + minx = min (x - wsize + 1, minx) y = int(v[1] * size) - maxy = max (y, maxy) - miny = min (y, miny) + maxy = max (y + wsize - 1, maxy) + miny = min (y - wsize + 1, miny) wrapSize = max (maxx - minx + 1, maxy - miny + 1) scale = float (size) / float (wrapSize) + max_index = size - 1 # max index of the buffer (height or width) fnum = 0 fcnt = len (vList) @@ -361,31 +367,31 @@ def UV_Export_TGA(vList, size, wsize, wrap, file): if step: try: for t in xrange(step): - x = int(floor((co1[0] + t*(co2[0]-co1[0])/step) * size)) - y = int(floor((co1[1] + t*(co2[1]-co1[1])/step) * size)) + x = int(floor((co1[0] + t*(co2[0]-co1[0])/step) * max_index)) + y = int(floor((co1[1] + t*(co2[1]-co1[1])/step) * max_index)) - if wrap: - x = x % wrapSize - y = y % wrapSize - else: - x = int ((x - minx) * scale) - y = int ((y - miny) * scale) - - co = x * 1 + y * 1 * size; - - img[co] = 0 - if wsize > 1: - for x in range(-1*wsize + 1,wsize): - for y in range(-1*wsize,wsize): - img[co + 1 * x + y * 1 * size] = 0 + for dx in range(-1*wsize + 1, wsize): + if wrap: + wx = (x + dx) % wrapSize + else: + wx = int ((x - minx + dx) * scale) + + for dy in range(-1*wsize + 1, wsize): + if wrap: + wy = (y + dy) % wrapSize + else: + wy = int ((y - miny + dy) * scale) + + co = wx * 1 + wy * 1 * size + img[co] = 0 except OverflowError: if not extreme_warning: print "Skipping extremely long UV edges, check your layout for excentric values" extreme_warning = True for v in f: - x = int(v[0] * size) - y = int(v[1] * size) + x = int(v[0] * max_index) + y = int(v[1] * max_index) if wrap: x = x % wrapSize |