[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Usata-commits] Changes to usata2/src/tools/blender_export.py
From: |
Chong Kai Xiong |
Subject: |
[Usata-commits] Changes to usata2/src/tools/blender_export.py |
Date: |
Mon, 24 Jan 2005 02:55:05 -0500 |
Index: usata2/src/tools/blender_export.py
diff -u usata2/src/tools/blender_export.py:1.1
usata2/src/tools/blender_export.py:1.2
--- usata2/src/tools/blender_export.py:1.1 Wed Jan 19 23:10:48 2005
+++ usata2/src/tools/blender_export.py Mon Jan 24 07:55:03 2005
@@ -17,157 +17,202 @@
# included in the software distribution, or visit
# http://www.fsf.org/licenses/gpl.html.
#
-# $Id: blender_export.py,v 1.1 2005/01/19 23:10:48 Descender Exp $
+# $Id: blender_export.py,v 1.2 2005/01/24 07:55:03 Descender Exp $
+
+# TODO
+# * Convert writer to use xml.sax.writer.PrettyPrinter
+# * Add save feedback
+# * Add more GUI controls
__author__ = "Chong Kai Xiong"
__version__ = "0.1"
__email__ = "address@hidden"
-__url__ = "http://www.nongnu.org/usata"
+__url__ = "http://www.nongnu.org/usata"
import Blender
-from Blender.BGL import *
+from Blender.BGL import *
+from xml.sax.xmlreader import AttributesImpl
+from xml.sax.saxutils import XMLGenerator
# event numbers
-evNone = 0
-evSave = 100
-evQuit = 101
+EV_NONE = 0
+EV_SAVE = 100
+EV_QUIT = 101
-OutputName = Blender.Draw.Create("untitled.xml")
+output_name = Blender.Draw.Create("untitled.xml")
+output_charset = 'utf-8'
+fp_format = '%.8f'
class XmlExporter:
-
- def __init__(self, FileName):
- self.FileName = FileName
- self.File = None
-
- def WriteVertexList(self, VertexList):
-
- # print vertex list
-
- self.File.write("VertexList {\n")
+ def __init__(self, filename):
+ self.filename = filename
+ self.file = None
+ self.writer = None
+
+ def write_vertex(self, vertex):
+ self.writer.startElement("vertex", {})
+
+ self.writer.startElement("position",
+ {"x": fp_format % vertex.co[0],
+ "y": fp_format % vertex.co[1],
+ "z": fp_format % vertex.co[2]}
+ )
+ self.writer.endElement("position")
+
+ self.writer.startElement("texture",
+ {"u": fp_format % vertex.uvco[0],
+ "v": fp_format % vertex.uvco[1]}
+ )
+ self.writer.endElement("texture")
+
+ self.writer.startElement("normal",
+ {"x": fp_format % vertex.no[0],
+ "y": fp_format % vertex.no[1],
+ "z": fp_format % vertex.no[2]}
+ )
+ self.writer.endElement("normal")
+
+ self.writer.endElement("vertex")
+
+ def write_vertex_list(self, vertices):
+ self.writer.startElement("vertices", {})
+
+ for vertex in vertices:
+ self.write_vertex(vertex)
+
+ self.writer.endElement("vertices")
+
+ def write_vertex_index_list(self, vertices):
+ self.writer.startElement("vertex_indices", {})
+
+ for vertex in vertices:
+ self.writer.startElement("index", {})
+ self.writer.characters("%d" % vertex.index)
+ self.writer.endElement("index")
+
+ self.writer.endElement("vertex_indices")
+
+ def write_face(self, face):
+ self.writer.startElement("face", {})
- for Vertex in VertexList:
- self.File.write(" Vertex {\n")
- self.File.write(" Position [ %.8f %.8f %.8f ]\n" %
- (Vertex.co[0], Vertex.co[1], Vertex.co[2]))
- self.File.write(" Texture [ %.8f %.8f ]\n" %
- (Vertex.uvco[0], Vertex.uvco[1]))
- self.File.write(" Normal [ %.8f %.8f %.8f ]\n" %
- (Vertex.no[0], Vertex.no[1], Vertex.no[2]))
- self.File.write(" } # Vertex\n")
+ self.write_vertex_index_list(face.v)
- self.File.write(" } # vertex list\n")
+ self.writer.startElement("material", {})
+ self.writer.characters("%d" % face.mat)
+ self.writer.endElement("material")
+ self.writer.endElement("face")
- def WriteVertexIndexList(self, VertexList):
+ def write_face_list(self, faces):
- self.File.write("VertexList [ ")
+ self.writer.startElement("faces", {})
- for i in range(len(VertexList)-1):
- self.File.write("%d, " % VertexList[i].index)
+ for face in faces:
+ self.write_face(face)
- self.File.write("%d ]\n" % VertexList[-1].index)
+ self.writer.endElement("faces")
+ def write_camera(self, camera):
- def WriteFaceList(self, FaceList):
-
- # print face list
+ camera_obj = Blender.Object.Get(camera.getName())
- self.File.write("FaceList {\n")
+ self.writer.startElement("camera", {})
- for Face in FaceList:
- self.File.write(" Face {\n")
-
- self.WriteVertexIndexList(Face.v)
-
- self.File.write(" Material %d\n" % Face.mat)
-
- self.File.write(" } # Face\n")
+ self.writer.startElement("name", {})
+ self.writer.characters(camera.getName());
+ self.writer.endElement("name")
- self.File.write("} # Face List\n")
+ self.writer.startElement("position",
+ {"x": fp_format % camera_obj.loc[0],
+ "y": fp_format % camera_obj.loc[1],
+ "z": fp_format % camera_obj.loc[2]}
+ )
+ self.writer.endElement("position")
-
- def WriteCamera(self, Camera):
+ self.writer.startElement("lens", {})
+ self.writer.characters(fp_format % camera.getLens())
+ self.writer.endElement("lens")
- CameraObj = Blender.Object.Get(Camera.getName())
-
- self.File.write("Camera {\n")
+ self.writer.startElement("near", {})
+ self.writer.characters(fp_format % camera.getClipStart())
+ self.writer.endElement("near")
- self.File.write(" Name '%s'\n" % Camera.getName())
+ self.writer.startElement("far", {})
+ self.writer.characters(fp_format % camera.getClipEnd())
+ self.writer.endElement("far")
- self.File.write(" Position [%.8f, %.8f, %.8f]\n" %
- (CameraObj.loc[0],
- CameraObj.loc[1],
- CameraObj.loc[2]))
+ self.writer.endElement("camera")
- self.File.write(" Lens %.8f\n" % Camera.getLens())
- self.File.write(" Near %.8f\n" % Camera.getClipStart())
- self.File.write(" Far %.8f\n" % Camera.getClipEnd())
-
- self.File.write("} # Camera\n")
+ def write_mesh(self, mesh):
+ self.write_vertex_list(mesh.verts)
+ self.write_face_list(mesh.faces)
- def WriteMesh(self, Mesh):
- self.WriteVertexList(Mesh.verts)
- self.WriteFaceList(Mesh.faces)
+ def write_object(self, object):
+ self.writer.startElement("object", {})
-
- def WriteObject(self, Object):
-
- self.File.write("Object {\n")
- self.File.write(" Name '%s'\n" % Object.name)
- self.WriteMesh(Blender.NMesh.GetRaw(Object.name))
- self.File.write("} # Object\n")
+ self.writer.startElement("name", {})
+ self.writer.characters(object.name)
+ self.writer.endElement("name")
-
- def Write(self):
- print "Writing...", self.FileName
+ self.write_mesh(Blender.NMesh.GetRaw(object.name))
- self.File = open(self.FileName, "w")
+ self.writer.endElement("object")
- self.File.write("Scene {\n")
-
- # write all cameras
+ def write_scene(self):
+ self.writer.startElement("scene", {})
- print "Writing cameras..."
+ # write all cameras
- Cameras = Blender.Camera.Get()
+ print "Writing cameras..."
- print "..."
-
- for Camera in Cameras:
- self.WriteCamera(Camera)
+ cameras = Blender.Camera.Get()
- # write mesh objects
+ print "..."
- print "Writing objects..."
+ for camera in cameras:
+ self.write_camera(camera)
- Objects = Blender.Object.Get()
+ # write mesh objects
- for Object in Objects:
- # check if object is a mesh
+ print "Writing objects..."
- Mesh = Blender.NMesh.GetRaw(Object.name)
- if (Mesh == None):
- continue
+ objects = Blender.Object.Get()
- self.WriteObject(Object)
+ for object in objects:
+ # check if object is a mesh
+
+ mesh = Blender.NMesh.GetRaw(object.name)
+ if (mesh == None):
+ continue
+
+ self.write_object(object)
+
+ self.writer.endElement("scene")
+
+ def write(self):
+ print "Writing...", self.filename
+
+ self.file = open(self.filename, "wt")
+ self.writer = XMLGenerator(self.file, output_charset)
+
+ self.writer.startDocument()
+ self.write_scene()
+ self.writer.endDocument()
+
+ self.file.close()
- self.File.write("} # Scene\n")
- self.File.close()
-
-
def Draw():
- global OutputName
-
+ global output_name
+
# clear window
glClearColor(0.6, 0.6, 0.65, 1.0)
glClear(GL_COLOR_BUFFER_BIT)
@@ -178,38 +223,34 @@
Blender.Draw.Text("Blender XML file exporter")
# filename entry button
- OutputName = Blender.Draw.String("File: ", evNone,
- 50, 400, 400, 20,
- OutputName.val, 255,
- "filename")
+ output_name = Blender.Draw.String("File: ", EV_NONE,
+ 50, 400, 400, 20,
+ output_name.val, 255,
+ "filename")
# save button
- Blender.Draw.Button("Save", evSave, 50, 350, 50, 20,
- "save file")
+ Blender.Draw.Button("Save", EV_SAVE, 50, 350, 50, 20,
+ "save file")
# quit button
- Blender.Draw.Button("Quit", evQuit, 110, 350, 50, 20,
- "exit script")
-
-
-def HandleWidgetEvent(Event):
- global evSave, evQuit
-
- if (Event == evSave):
- ExportScene()
- elif (Event == evQuit):
- Blender.Draw.Exit()
-
-
-def ExportScene():
- global OutputName
-
+ Blender.Draw.Button("Quit", EV_QUIT, 110, 350, 50, 20,
+ "exit script")
+
+
+def handle_widget_event(event):
+ if event == EV_SAVE:
+ export_scene()
+ elif event == EV_QUIT:
+ Blender.Draw.Exit()
+
+
+def export_scene():
print "Exporting scene..."
- Exporter = XmlExporter(OutputName.val)
- Exporter.Write()
+ exporter = XmlExporter(output_name.val)
+ exporter.write()
def main():
- Blender.Draw.Register(Draw, None, HandleWidgetEvent)
+ Blender.Draw.Register(Draw, None, handle_widget_event)
if __name__ == "__main__":
main()