made some changes to vrml97_export, this script needs to be re-written, until then fixed some incorrect assumtions it made- was using the first world in the list for AMB color no matter what world was being used, was also using the image name rather then the file name for its image URL references.

This commit is contained in:
Campbell Barton
2006-05-16 22:57:24 +00:00
parent 456396fc3e
commit 0d8f85eda8

View File

@@ -62,12 +62,7 @@ for each texture);<br>
import Blender
from Blender import Object, Mesh, Lamp, Draw, BGL, Image, Text, sys, Mathutils
from Blender.Scene import Render
try:
from os.path import exists, join
pytinst = 1
except:
print "No Python installed, for full features install Python (http://www.python.org/)."
pytinst = 0
import math
####################################
@@ -75,7 +70,7 @@ import math
####################################
scene = Blender.Scene.getCurrent()
world = Blender.World.Get()
world = Blender.World.GetCurrent()
worldmat = Blender.Texture.Get()
filename = Blender.Get('filename')
_safeOverwrite = True
@@ -211,7 +206,7 @@ class VRML2Export:
Qf = self.multiplyQuaternions(Q1, Q[2])
angleAxis = self.quaternionToAngleAxis(Qf)
self.writeIndented("DEF %s Viewpoint {\n" % (self.cleanStr(thisObj.name)), 1)
self.writeIndented("description \"%s\" \n" % (thisObj.name))
self.writeIndented('description "%s" \n' % thisObj.name)
self.writeIndented("position %3.2f %3.2f %3.2f\n" % (loc[0], loc[1], loc[2]))
self.writeIndented("orientation %3.2f %3.2f %3.2f %3.2f\n" % (angleAxis[0], angleAxis[1], -angleAxis[2], angleAxis[3]))
self.writeIndented("fieldOfView %.3f\n" % (lens))
@@ -219,17 +214,17 @@ class VRML2Export:
self.writeIndented("\n")
def writeFog(self):
if len(world) > 0:
mtype = world[0].getMistype()
mparam = world[0].getMist()
grd = world[0].getHor()
if world:
mtype = world.getMistype()
mparam = world.getMist()
grd = world.getHor()
grd0, grd1, grd2 = grd[0], grd[1], grd[2]
else:
return
if (mtype == 1 or mtype == 2):
self.writeIndented("Fog {\n",1)
self.writeIndented("fogType \"%s\"\n" % self.namesFog[mtype])
self.writeIndented("color %s %s %s" % (round(grd0,self.cp), round(grd1,self.cp), round(grd2,self.cp)) + "\n")
self.writeIndented('fogType "%s"\n' % self.namesFog[mtype])
self.writeIndented("color %s %s %s\n" % (round(grd0,self.cp), round(grd1,self.cp), round(grd2,self.cp)))
self.writeIndented("visibilityRange %s\n" % round(mparam[2],self.cp))
self.writeIndented("}\n",-1)
self.writeIndented("\n")
@@ -248,7 +243,7 @@ class VRML2Export:
elif objType == "Lamp":
headlight = "FALSE"
self.writeIndented("NavigationInfo {\n",1)
self.writeIndented("headlight %s" % headlight + "\n")
self.writeIndented("headlight %s\n" % headlight)
self.writeIndented("visibilityLimit %s\n" % (round(vislimit,self.cp)))
self.writeIndented("type [\"EXAMINE\", \"ANY\"]\n")
self.writeIndented("avatarSize [0.25, 1.75, 0.75]\n")
@@ -256,8 +251,8 @@ class VRML2Export:
self.writeIndented(" \n")
def writeSpotLight(self, object, lamp):
if len(world) > 0:
ambi = world[0].getAmb()
if world:
ambi = world.getAmb()
ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5
else:
ambi = 0
@@ -289,8 +284,8 @@ class VRML2Export:
self.writeIndented("\n")
def writeDirectionalLight(self, object, lamp):
if len(world) > 0:
ambi = world[0].getAmb()
if world:
ambi = world.getAmb()
ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5
else:
ambi = 0
@@ -307,8 +302,8 @@ class VRML2Export:
self.writeIndented("\n")
def writePointLight(self, object, lamp):
if len(world) > 0:
ambi = world[0].getAmb()
if world:
ambi = world.getAmb()
ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5
else:
ambi = 0
@@ -619,8 +614,8 @@ class VRML2Export:
ambient = mat.amb/3
diffuseR, diffuseG, diffuseB = mat.rgbCol[0], mat.rgbCol[1],mat.rgbCol[2]
if len(world) > 0:
ambi = world[0].getAmb()
if world:
ambi = world.getAmb()
ambi0, ambi1, ambi2 = (ambi[0]*mat.amb)*2, (ambi[1]*mat.amb)*2, (ambi[2]*mat.amb)*2
else:
ambi0, ambi1, ambi2 = 0, 0, 0
@@ -654,19 +649,19 @@ class VRML2Export:
return
else:
self.writeIndented("texture DEF %s ImageTexture {\n" % self.cleanStr(name), 1)
self.writeIndented("url \"%s\"\n" % name.split("\\")[-1].split("/")[-1])
self.writeIndented('url "%s"\n' % name.split("\\")[-1].split("/")[-1])
self.writeIndented("}\n",-1)
self.texNames[name] = 1
def writeBackground(self):
if len(world) > 0:
worldname = world[0].getName()
if world:
worldname = world.getName()
else:
return
blending = world[0].getSkytype()
grd = world[0].getHor()
blending = world.getSkytype()
grd = world.getHor()
grd0, grd1, grd2 = grd[0], grd[1], grd[2]
sky = world[0].getZen()
sky = world.getZen()
sky0, sky1, sky2 = sky[0], sky[1], sky[2]
mix0, mix1, mix2 = grd[0]+sky[0], grd[1]+sky[1], grd[2]+sky[2]
mix0, mix1, mix2 = mix0/2, mix1/2, mix2/2
@@ -713,19 +708,22 @@ class VRML2Export:
alltexture = len(worldmat)
for i in range(alltexture):
namemat = worldmat[i].getName()
pic = worldmat[i].getImage()
if (namemat == "back") and (pic != None):
self.writeIndented("backUrl \"%s\"\n" % str(pic.getName()))
elif (namemat == "bottom") and (pic != None):
self.writeIndented("bottomUrl \"%s\"\n" % str(pic.getName()))
elif (namemat == "front") and (pic != None):
self.writeIndented("frontUrl \"%s\"\n" % str(pic.getName()))
elif (namemat == "left") and (pic != None):
self.writeIndented("leftUrl \"%s\"\n" % str(pic.getName()))
elif (namemat == "right") and (pic != None):
self.writeIndented("rightUrl \"%s\"\n" % str(pic.getName()))
elif (namemat == "top") and (pic != None):
self.writeIndented("topUrl \"%s\"\n" % str(pic.getName()))
pic = worldmat[i].getImage()
if pic:
# Stripped path.
pic_path= pic.filename.split('\\')[-1].split('/')[-1]
if namemat == "back":
self.writeIndented('backUrl "%s"\n' % pic_path)
elif namemat == "bottom":
self.writeIndented('bottomUrl "%s"\n' % pic_path)
elif namemat == "front":
self.writeIndented('frontUrl "%s"\n' % pic_path)
elif namemat == "left":
self.writeIndented('leftUrl "%s"\n' % pic_path)
elif namemat == "right":
self.writeIndented('rightUrl "%s"\n' % pic_path)
elif namemat == "top":
self.writeIndented('topUrl "%s"\n' % pic_path)
self.writeIndented("}",-1)
self.writeIndented("\n\n")
@@ -803,7 +801,7 @@ class VRML2Export:
if newName[0].isdigit():
newName='%s%s' % ('_',newName)
for bad in [' ','"','#',"'",',','.','[','\\',']','{','}']:
for bad in (' ','"','#',"'",',','.','[','\\',']','{','}'):
newName=newName.replace(bad,'_')
return newName
@@ -837,26 +835,25 @@ class VRML2Export:
if c.r != 255 and c.g != 255 and c.b !=255:
vColors['multi']=1
if sided.has_key(sidename):
try:
sided[sidename]+=1
else:
except:
sided[sidename]=1
if face.image:
faceName="%s_%s" % (face.image.name, sidename);
if imageMap.has_key(faceName):
try:
imageMap[faceName].append(face)
else:
imageMap[faceName]=[face.image.name,sidename,face]
except:
imageMap[faceName]= [face.image.name,sidename,face]
if self.verbose > 2:
for faceName in imageMap.keys():
ifs=imageMap[faceName]
for faceName, ifs in imageMap.iteritems():
print "Debug: faceName=%s image=%s, solid=%s facecnt=%d" % \
(faceName, ifs[0], ifs[1], len(ifs)-2)
return len(imageMap.keys())
return len(imageMap)
def faceToString(self,face):
@@ -984,12 +981,11 @@ class VRML2Export:
##########################################################
def select_file(filename):
if pytinst == 1:
if exists(filename) and _safeOverwrite:
result = \
Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0")
if(result != 1):
return
if sys.exists(filename) and _safeOverwrite:
result = \
Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0")
if(result != 1):
return
if not filename.endswith(extension):
filename += extension
@@ -997,16 +993,6 @@ def select_file(filename):
wrlexport=VRML2Export(filename)
wrlexport.export(scene, world, worldmat)
def createWRLPath():
filename = Blender.Get('filename')
print filename
if filename.find('.') != -1:
filename = filename.split('.')[0]
filename += extension
print filename
return filename
#########################################################
# main routine
@@ -1027,5 +1013,5 @@ else:
from gzip import *
else:
extension=".wrl"
Blender.Window.FileSelector(select_file,"Export VRML97",createWRLPath())
Blender.Window.FileSelector(select_file, "Export VRML97", sys.makename(ext=extension))