usata-commits
[Top][All Lists]
Advanced

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]