[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15270] trunk/blender/release/scripts/ vrml97_export.py: == VRML97 export ==

Chris Want cwant at ualberta.ca
Wed Jun 18 19:14:38 CEST 2008


Revision: 15270
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15270
Author:   hos
Date:     2008-06-18 19:13:33 +0200 (Wed, 18 Jun 2008)

Log Message:
-----------
== VRML97 export ==

Patch #10569 from Michalis Kamburelis (sorry for the delay).

This patch adds a popup menu that lets the user choose whether
they want to export selected, whether thay wanted to export
compressed, and whether they want to export the file from
blender's "Z up" coordinates to VRML's "Y up".

I'm not too crazy about the caching to disk of these options
via GetRegistry/SetRegistry, but since this seems to occur
in many of the other export scripts I'll leave it as is.

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-06-18 15:22:42 UTC (rev 15269)
+++ trunk/blender/release/scripts/vrml97_export.py	2008-06-18 17:13:33 UTC (rev 15270)
@@ -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,8 +631,9 @@
 		meshVertexList = me.verts
 
 		for vertex in meshVertexList:
-			blenvert = Mathutils.Vector(vertex.co)
-			vrmlvert = M_blen2vrml * blenvert
+			vrmlvert = blenvert = Mathutils.Vector(vertex.co)
+			if export_rotate_z_to_y.val:
+				vrmlvert = M_blen2vrml * vrmlvert
 			self.writeUnindented("%s %s %s\n " % \
 								 (vrmlvert[0], \
 								  vrmlvert[1], \
@@ -1016,7 +1015,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 +1091,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 +1100,7 @@
 		for thisObj in allObj:
 			self.writeObject(thisObj)
 
-		if ARG != 'selected':
+		if not export_selection_only.val:
 			self.writeScript()
 		self.cleanup()
 
@@ -1213,26 +1215,54 @@
 	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':
+# 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:
 		extension=".wrz"
 		from gzip import *
 	else:
 		extension=".wrl"
 	Blender.Window.FileSelector(select_file, "Export VRML97", \
 								sys.makename(ext=extension))
-





More information about the Bf-blender-cvs mailing list