== 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.
This commit is contained in:
Chris Want 2008-06-18 17:13:33 +00:00
parent 55433f51d8
commit 1c1f81914c

@ -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 @@ want to export only selected or all relevant objects.
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 @@ worldmat = Blender.Texture.Get()
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 @@ class VRML2Export:
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 @@ class VRML2Export:
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 @@ class VRML2Export:
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 @@ class VRML2Export:
for thisObj in allObj:
self.writeObject(thisObj)
if ARG != 'selected':
if not export_selection_only.val:
self.writeScript()
self.cleanup()
@ -1213,26 +1215,54 @@ def select_file(filename):
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))