[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: |
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()
- [Usata-commits] Changes to usata2/src/tools/blender_export.py,
Chong Kai Xiong <=