[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11339] trunk/blender/release/scripts/ uv_export.py: Fix for #6946 Save UV layout broken for large wire sizes

Martin Poirier theeth at yahoo.com
Mon Jul 23 03:12:08 CEST 2007


Revision: 11339
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11339
Author:   theeth
Date:     2007-07-23 03:12:07 +0200 (Mon, 23 Jul 2007)

Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/release/scripts/uv_export.py

Modified: trunk/blender/release/scripts/uv_export.py
===================================================================
--- trunk/blender/release/scripts/uv_export.py	2007-07-22 22:10:54 UTC (rev 11338)
+++ trunk/blender/release/scripts/uv_export.py	2007-07-23 01:12:07 UTC (rev 11339)
@@ -9,7 +9,7 @@
 
 __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 @@
 #	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 @@
 	
 	step = 0
 
-	img = Buffer(size+1,size+1)
+	img = Buffer(size,size)
 
 	if wrap:
 		wrapSize = size
@@ -333,15 +338,16 @@
 		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 @@
 			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





More information about the Bf-blender-cvs mailing list