[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14752] trunk/blender/release/scripts/ vrml97_export.py: fix for [#6692] vrml (.wrl) export bug in V2.44 release

Campbell Barton ideasman42 at gmail.com
Thu May 8 22:51:26 CEST 2008


Revision: 14752
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14752
Author:   campbellbarton
Date:     2008-05-08 22:51:22 +0200 (Thu, 08 May 2008)

Log Message:
-----------
fix for [#6692] vrml (.wrl) export bug in V2.44 release
patch from Michalis Kamburelis with some minor edits

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

Modified: trunk/blender/release/scripts/vrml97_export.py
===================================================================
--- trunk/blender/release/scripts/vrml97_export.py	2008-05-08 20:38:38 UTC (rev 14751)
+++ trunk/blender/release/scripts/vrml97_export.py	2008-05-08 20:51:22 UTC (rev 14752)
@@ -3,9 +3,6 @@
 Name: 'VRML97 (.wrl)...'
 Blender: 241
 Group: 'Export'
-Submenu: 'All Objects...' all
-Submenu: 'All Objects compressed...' comp
-Submenu: 'Selected Objects...' selected
 Tooltip: 'Export to VRML97 file (.wrl)'
 """
 
@@ -55,7 +52,7 @@
 
 import Blender
 from Blender import Object, Mesh, Lamp, Draw, BGL, \
-	 Image, Text, sys, Mathutils
+	 Image, Text, sys, Mathutils, Registry
 from Blender.Scene import Render
 
 import math
@@ -70,8 +67,9 @@
 filename = Blender.Get('filename')
 _safeOverwrite = True
 extension = ''
-ARG=''
 
+# Matrices below are used only when export_rotate_z_to_y.val:
+#
 # Blender is Z up, VRML is Y up, both are right hand coordinate
 # systems, so to go from Blender coords to VRML coords we rotate
 # by 90 degrees around the X axis. In matrix notation, we have a
@@ -633,12 +631,10 @@
 		meshVertexList = me.verts
 
 		for vertex in meshVertexList:
-			blenvert = Mathutils.Vector(vertex.co)
-			vrmlvert = M_blen2vrml * blenvert
-			self.writeUnindented("%s %s %s\n " % \
-								 (vrmlvert[0], \
-								  vrmlvert[1], \
-								  vrmlvert[2]))
+			vrmlvert = vertex.co
+			if export_rotate_z_to_y.val:
+				vrmlvert = M_blen2vrml * vrmlvert
+			self.writeUnindented("%.6f %.6f %.6f\n " % (vrmlvert[0], vrmlvert[1], vrmlvert[2]))
 		self.writeIndented("]\n", -1)
 		self.writeIndented("}\n", -1)
 		self.writeIndented("\n")
@@ -1016,7 +1012,10 @@
 			return
 
 		ob_matrix = Mathutils.Matrix(ob.getMatrix('worldspace'))
-		matrix = M_blen2vrml * ob_matrix * M_vrml2blen
+		if export_rotate_z_to_y.val:
+			matrix = M_blen2vrml * ob_matrix * M_vrml2blen
+		else:
+			matrix = ob_matrix
 		e      = matrix.rotationPart().toEuler()
 
 		v = matrix.translationPart()
@@ -1089,7 +1088,7 @@
 		self.writeFog()
 		self.proto = 0
 		allObj = []
-		if ARG == 'selected':
+		if export_selection_only.val:
 			allObj = list(scene.objects.context)
 		else:
 			allObj = list(scene.objects)
@@ -1098,7 +1097,7 @@
 		for thisObj in allObj:
 			self.writeObject(thisObj)
 
-		if ARG != 'selected':
+		if not export_selection_only.val:
 			self.writeScript()
 		self.cleanup()
 
@@ -1213,26 +1212,58 @@
 	wrlexport=VRML2Export(filename)
 	wrlexport.export(scene, world, worldmat)
 
+#########################################################
+# UI and Registry utilities
+#########################################################
 
+export_selection_only = Draw.Create(0)
+export_rotate_z_to_y = Draw.Create(1)
+export_compressed = Draw.Create(0)
+
+def save_to_registry():
+	d = {}
+	d['selection_only'] = export_selection_only.val
+	d['rotate_z_to_y'] = export_rotate_z_to_y.val
+	d['compressed'] = export_compressed.val
+	Registry.SetKey('vrml97_export', d, True)
+
+def load_from_registry():
+	d = Registry.GetKey('vrml97_export', True)
+	if d:
+		try:
+			export_selection_only.val = d['selection_only']
+			export_rotate_z_to_y.val = d['rotate_z_to_y']
+			export_compressed.val = d['compressed']
+		except: save_to_registry() # If data is not valid, rewrite it.
+
+def show_popup():
+	pup_block = [
+		('Selection Only', export_selection_only, 'Only export objects in visible selection. Else export whole scene.'),
+		('Rotate +Z to +Y', export_rotate_z_to_y, 'Rotate such that +Z axis (Blender up) becomes +Y (VRML up).'),
+		('Compress', export_compressed, 'Generate a .wrz file (normal VRML compressed by gzip).')
+		]
+	return Draw.PupBlock('Export VRML 97...', pup_block) 
+
 #########################################################
 # main routine
 #########################################################
 
-try:
-	ARG = __script__['arg'] # user selected argument
-except:
-	print "older version"
+load_from_registry()
 
-if Blender.Get('version') < 235:
-	print "Warning: VRML97 export failed, wrong blender version!"
-	print " You aren't running blender version 2.35 or greater"
-	print " download a newer version from http://blender3d.org/"
-else:
-	if ARG == 'comp':
-		extension=".wrz"
-		from gzip import *
+# Note that show_popup must be done before Blender.Window.FileSelector,
+# because export_compressed affects the suggested extension of resulting
+# file.
+
+if show_popup():
+	save_to_registry()
+	if export_compressed.val:
+		try:
+			extension=".wrz"
+			from gzip import *
+		except:
+			print "could not import gzip"
+			pass
 	else:
 		extension=".wrl"
 	Blender.Window.FileSelector(select_file, "Export VRML97", \
 								sys.makename(ext=extension))
-





More information about the Bf-blender-cvs mailing list