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: Sun, 13 Feb 2005 04:42:44 -0500

Index: usata2/src/tools/blender_export.py
diff -u usata2/src/tools/blender_export.py:1.2 
usata2/src/tools/blender_export.py:1.3
--- usata2/src/tools/blender_export.py:1.2      Mon Jan 24 07:55:03 2005
+++ usata2/src/tools/blender_export.py  Sun Feb 13 09:42:43 2005
@@ -17,40 +17,56 @@
 # included in the software distribution, or visit
 # http://www.fsf.org/licenses/gpl.html.
 #
-# $Id: blender_export.py,v 1.2 2005/01/24 07:55:03 Descender Exp $
+# $Id: blender_export.py,v 1.3 2005/02/13 09:42:43 Descender Exp $
 
 # TODO
 # * Convert writer to use xml.sax.writer.PrettyPrinter
+#   -> There doesn't seem to be a way to set output charset
+#   -> Not exactly pretty either
 # * Add save feedback
 # * Add more GUI controls
 
 __author__  = "Chong Kai Xiong"
-__version__ = "0.1"
+__version__ = "0.2"
 __email__   = "address@hidden"
 __url__            = "http://www.nongnu.org/usata";
 
 import Blender
+import xml.sax.writer
+import gettext
 
-from Blender.BGL       import *
-from xml.sax.xmlreader import AttributesImpl
-from xml.sax.saxutils  import XMLGenerator
+from Blender.BGL import *
+from Blender     import Registry
 
+# i18n
+
+I18N_DOMAIN = "blender-usata-export"
 
 # event numbers
 
-EV_NONE = 0
-EV_SAVE = 100
-EV_QUIT = 101
+EVENT_NONE = 0
+EVENT_SAVE = 100
+EVENT_QUIT = 101
+EVENT_FILENAME = 102
+
+_ = gettext.gettext
 
-output_name = Blender.Draw.Create("untitled.xml")
-output_charset = 'utf-8'
+class XmlWriter(xml.sax.writer.PrettyPrinter):
+    def __init__(self, fp):
+        xml.sax.writer.PrettyPrinter.__init__(self, fp)
 
-fp_format = '%.8f'
+    def characters(self, data, start = 0, length = -1):
+        if length < 0:
+            length = len(data) - start
+        xml.sax.writer.PrettyPrinter.characters(self, data, start, length)
 
-class XmlExporter:
+class XmlExporter(object):
 
-    def __init__(self, filename):
+    def __init__(self, filename, charset, fp_format):
        self.filename = filename
+        self.charset = charset
+        self.fp_format = fp_format
+        
        self.file = None
        self.writer = None
 
@@ -58,22 +74,22 @@
        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]}
+                                {"x": self.fp_format % vertex.co[0],
+                                 "y": self.fp_format % vertex.co[1],
+                                 "z": self.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]}
+                                {"u": self.fp_format % vertex.uvco[0],
+                                 "v": self.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]}
+                                {"x": self.fp_format % vertex.no[0],
+                                 "y": self.fp_format % vertex.no[1],
+                                 "z": self.fp_format % vertex.no[2]}
                                 )
        self.writer.endElement("normal")
 
@@ -128,22 +144,22 @@
        self.writer.endElement("name")
 
        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]}
+                               {"x": self.fp_format % camera_obj.loc[0],
+                                "y": self.fp_format % camera_obj.loc[1],
+                                "z": self.fp_format % camera_obj.loc[2]}
                                )
        self.writer.endElement("position")
 
        self.writer.startElement("lens", {})
-       self.writer.characters(fp_format % camera.getLens())
+       self.writer.characters(self.fp_format % camera.getLens())
        self.writer.endElement("lens")
 
        self.writer.startElement("near", {})
-       self.writer.characters(fp_format % camera.getClipStart())
+       self.writer.characters(self.fp_format % camera.getClipStart())
        self.writer.endElement("near")
 
        self.writer.startElement("far", {})
-       self.writer.characters(fp_format % camera.getClipEnd())
+       self.writer.characters(self.fp_format % camera.getClipEnd())
        self.writer.endElement("far")
 
        self.writer.endElement("camera")
@@ -169,23 +185,11 @@
        self.writer.startElement("scene", {})
 
        # write all cameras
-
-       print "Writing cameras..."
-
-       cameras = Blender.Camera.Get()
-
-       print "..."
-
-       for camera in cameras:
+       for camera in Blender.Camera.Get():
            self.write_camera(camera)
 
        # write mesh objects
-
-       print "Writing objects..."
-
-       objects = Blender.Object.Get()
-
-       for object in objects:
+       for object in Blender.Object.Get():
            # check if object is a mesh
 
            mesh = Blender.NMesh.GetRaw(object.name)
@@ -197,10 +201,10 @@
        self.writer.endElement("scene")       
 
     def write(self):
-       print "Writing...", self.filename
+       print "Writing to file (%s)..." % self.filename
 
        self.file = open(self.filename, "wt")
-       self.writer = XMLGenerator(self.file, output_charset)
+       self.writer = XmlWriter(self.file)
 
        self.writer.startDocument()
        self.write_scene()
@@ -208,49 +212,77 @@
 
        self.file.close()
 
-
-
-def Draw():
-    global output_name
-
-    # clear window
-    glClearColor(0.6, 0.6, 0.65, 1.0)
-    glClear(GL_COLOR_BUFFER_BIT)
-
-    # draw title
-    glColor3f(0.0, 0.0, 0.0)
-    glRasterPos2i(50, 500)
-    Blender.Draw.Text("Blender XML file exporter")
-
-    # filename entry button
-    output_name = Blender.Draw.String("File: ", EV_NONE,
-                                    50, 400, 400, 20,
-                                    output_name.val, 255,
-                                    "filename")
-
-    # save button
-    Blender.Draw.Button("Save", EV_SAVE, 50, 350, 50, 20,
-                       "save file")
-
-    # quit button
-    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(output_name.val)
-    exporter.write()
+class GUIControl(object):
+    def __init__(self):
+        self.load_settings()
+
+    def load_settings(self):
+        self.settings = Registry.GetKey('Usata')
+
+        if not self.settings:
+            self.settings = {}
+
+        self.settings.setdefault('filename', 'untitled.xml')
+        self.settings.setdefault('charset', 'UTF-8')
+        self.settings.setdefault('float-format', "%.8f")
+
+    def save_settings(self):
+        Registry.SetKey('Usata', self.settings)
+
+    def export(self):
+        print "Exporting scene..."
+        exporter = XmlExporter(self.settings['filename'],
+                               self.settings['charset'],
+                               self.settings['float-format'])
+        exporter.write()
+
+    def draw(self):
+        # clear window
+        glClearColor(0.6, 0.6, 0.65, 1.0)
+        glClear(GL_COLOR_BUFFER_BIT)
+
+        # draw title
+        glColor3f(0.0, 0.0, 0.0)
+        glRasterPos2i(50, 500)
+        Blender.Draw.Text(_("Usata XML file exporter"))
+
+        # filename entry button        
+        self.output_name = Blender.Draw.String(_("File: "), EVENT_FILENAME,
+                                               50, 400, 400, 20,
+                                               self.settings['filename'], 255,
+                                               "Output filename")
+
+        # save button
+        Blender.Draw.Button(_("Save"), EVENT_SAVE, 50, 350, 50, 20,
+                            "save file")
+
+        # quit button
+        Blender.Draw.Button(_("Quit"), EVENT_QUIT, 110, 350, 50, 20,
+                            "exit script")
+
+    def run(self):
+        Blender.Draw.Register(self.draw, None, self.handle_event)
+
+    def handle_event(self, event):
+        if event == EVENT_FILENAME:
+            self.settings['filename'] = self.output_name.val
+
+        elif event == EVENT_SAVE:
+            self.export()
+
+        elif event == EVENT_QUIT:
+            self.save_settings()
+            Blender.Draw.Exit()
+
+def setup_i18n():
+    gettext.bindtextdomain(I18N_DOMAIN)
+    #gettext.bind_textdomain_codeset(I18N_DOMAIN, 'UTF-8') # Python 2.4
+    gettext.textdomain(I18N_DOMAIN)
 
 def main():
-    Blender.Draw.Register(Draw, None, handle_widget_event)
+    setup_i18n()
+    gui = GUIControl()
+    gui.run()
 
 if __name__ == "__main__":
     main()




reply via email to

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