== 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:
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))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user