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))
-


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to