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: Wed, 16 Feb 2005 15:27:16 -0500

Index: usata2/src/tools/blender_export.py
diff -u usata2/src/tools/blender_export.py:1.3 
usata2/src/tools/blender_export.py:1.4
--- usata2/src/tools/blender_export.py:1.3      Sun Feb 13 09:42:43 2005
+++ usata2/src/tools/blender_export.py  Wed Feb 16 20:27:15 2005
@@ -1,11 +1,11 @@
 #!BPY
 
-"""
-Name: 'Usata'
+'''
+Name: "Usata"
 Blender: 234
-Group: 'Export'
-Tooltip: 'Export to Usata mesh format.'
-"""
+Group: "Export"
+Tooltip: "Export to Usata mesh format."
+'''
 # -*- coding: 'utf-8' -*-
 
 # Copyright (C) 2001-2005 Chong Kai Xiong (descender)
@@ -17,7 +17,7 @@
 # included in the software distribution, or visit
 # http://www.fsf.org/licenses/gpl.html.
 #
-# $Id: blender_export.py,v 1.3 2005/02/13 09:42:43 Descender Exp $
+# $Id: blender_export.py,v 1.4 2005/02/16 20:27:15 Descender Exp $
 
 # TODO
 # * Convert writer to use xml.sax.writer.PrettyPrinter
@@ -26,10 +26,10 @@
 # * Add save feedback
 # * Add more GUI controls
 
-__author__  = "Chong Kai Xiong"
-__version__ = "0.2"
-__email__   = "address@hidden"
-__url__            = "http://www.nongnu.org/usata";
+__author__  = 'Chong Kai Xiong'
+__version__ = '0.2'
+__email__   = 'address@hidden'
+__url__            = 'http://www.nongnu.org/usata'
 
 import Blender
 import xml.sax.writer
@@ -40,7 +40,7 @@
 
 # i18n
 
-I18N_DOMAIN = "blender-usata-export"
+I18N_DOMAIN = 'blender-usata-export'
 
 # event numbers
 
@@ -48,6 +48,9 @@
 EVENT_SAVE = 100
 EVENT_QUIT = 101
 EVENT_FILENAME = 102
+EVENT_SELECT_CAMERA = 103
+EVENT_SELECT_MESH   = 104
+
 
 _ = gettext.gettext
 
@@ -62,148 +65,173 @@
 
 class XmlExporter(object):
 
-    def __init__(self, filename, charset, fp_format):
+    def __init__(self, filename, charset, fp_format, export):
        self.filename = filename
         self.charset = charset
         self.fp_format = fp_format
+        self.export = export
         
        self.file = None
        self.writer = None
 
     def write_vertex(self, vertex):
-       self.writer.startElement("vertex", {})
+       self.writer.startElement('vertex', {})
 
-       self.writer.startElement("position",
-                                {"x": self.fp_format % vertex.co[0],
-                                 "y": self.fp_format % vertex.co[1],
-                                 "z": self.fp_format % vertex.co[2]}
+       self.writer.startElement('position',
+                                {'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.endElement('position')
 
-       self.writer.startElement("texture",
-                                {"u": self.fp_format % vertex.uvco[0],
-                                 "v": self.fp_format % vertex.uvco[1]}
+       self.writer.startElement('texture',
+                                {'u': self.fp_format % vertex.uvco[0],
+                                 'v': self.fp_format % vertex.uvco[1]}
                                 )
-       self.writer.endElement("texture")
+       self.writer.endElement('texture')
 
-       self.writer.startElement("normal",
-                                {"x": self.fp_format % vertex.no[0],
-                                 "y": self.fp_format % vertex.no[1],
-                                 "z": self.fp_format % vertex.no[2]}
+       self.writer.startElement('normal',
+                                {'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")
+       self.writer.endElement('normal')
 
-       self.writer.endElement("vertex")
+       self.writer.endElement('vertex')
 
     def write_vertex_list(self, vertices):
-       self.writer.startElement("vertices", {})
+       self.writer.startElement('vertices', {})
 
        for vertex in vertices:
            self.write_vertex(vertex)
 
-       self.writer.endElement("vertices")
+       self.writer.endElement('vertices')
 
     def write_vertex_index_list(self, vertices):
-       self.writer.startElement("vertex_indices", {})
+       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.startElement('index', {})
+           self.writer.characters('%d' % vertex.index)
+           self.writer.endElement('index')
 
-       self.writer.endElement("vertex_indices")
+       self.writer.endElement('vertex_indices')
 
     def write_face(self, face):
-       self.writer.startElement("face", {})
+       self.writer.startElement('face', {})
 
        self.write_vertex_index_list(face.v)
 
-       self.writer.startElement("material", {})
-       self.writer.characters("%d" % face.mat)
-       self.writer.endElement("material")
+       self.writer.startElement('material', {})
+       self.writer.characters('%d' % face.mat)
+       self.writer.endElement('material')
 
-       self.writer.endElement("face")
+       self.writer.endElement('face')
 
     def write_face_list(self, faces):
 
-       self.writer.startElement("faces", {})
+       self.writer.startElement('faces', {})
 
        for face in faces:
            self.write_face(face)
 
-       self.writer.endElement("faces")        
+       self.writer.endElement('faces')        
 
     def write_camera(self, camera):
 
        camera_obj = Blender.Object.Get(camera.getName())
 
-       self.writer.startElement("camera", {})
+       self.writer.startElement('camera', {})
 
-       self.writer.startElement("name", {})
+       self.writer.startElement('name', {})
        self.writer.characters(camera.getName());
-       self.writer.endElement("name")
+       self.writer.endElement('name')
 
-       self.writer.startElement("position",
-                               {"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('position',
+                                 {'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.startElement('lens', {})
        self.writer.characters(self.fp_format % camera.getLens())
-       self.writer.endElement("lens")
+       self.writer.endElement('lens')
 
-       self.writer.startElement("near", {})
+       self.writer.startElement('near', {})
        self.writer.characters(self.fp_format % camera.getClipStart())
-       self.writer.endElement("near")
+       self.writer.endElement('near')
 
-       self.writer.startElement("far", {})
+       self.writer.startElement('far', {})
        self.writer.characters(self.fp_format % camera.getClipEnd())
-       self.writer.endElement("far")
+       self.writer.endElement('far')
 
-       self.writer.endElement("camera")
+       self.writer.endElement('camera')
 
     def write_mesh(self, mesh):
 
+        self.writer.startElement('mesh')
        self.write_vertex_list(mesh.verts)
        self.write_face_list(mesh.faces)
-
+        self.writer.endElement('mesh')
 
     def write_object(self, object):
-       self.writer.startElement("object", {})
+       self.writer.startElement('object', {})
 
-       self.writer.startElement("name", {})
+       self.writer.startElement('name', {})
        self.writer.characters(object.name)
-       self.writer.endElement("name")
+       self.writer.endElement('name')
 
-       self.write_mesh(Blender.NMesh.GetRaw(object.name))
+        location = object.getLocation()
+        self.writer.startElement('position',
+                                 {'x': self.fp_format % location[0],
+                                  'y': self.fp_format % location[1],
+                                  'z': self.fp_format % location[2]}
+                                 )
+        self.writer.endElement('position')
+
+        orientn = object.getEuler()
+        self.writer.startElement('orientation',
+                                 {'x': self.fp_format % orientn[0],
+                                  'y': self.fp_format % orientn[1],
+                                  'z': self.fp_format % orientn[2]}
+                                 )
+        self.writer.endElement('orientation')
+
+        size = object.size
+        self.writer.startElement('size',
+                                 {'x': self.fp_format % size[0],
+                                  'y': self.fp_format % size[1],
+                                  'z': self.fp_format % size[2]}
+                                 )
+        self.writer.endElement('size')
+       
+        mesh = Blender.NMesh.GetRaw(object.name)
+        if mesh and self.export['mesh']:
+            self.write_mesh(Blender.NMesh.GetRaw(object.name))
 
-       self.writer.endElement("object")
+       self.writer.endElement('object')
 
     def write_scene(self):
-       self.writer.startElement("scene", {})
-
-       # write all cameras
-       for camera in Blender.Camera.Get():
-           self.write_camera(camera)
-
-       # write mesh objects
-       for object in Blender.Object.Get():
-           # check if object is a mesh
-
-           mesh = Blender.NMesh.GetRaw(object.name)
-           if (mesh == None):
-               continue
-
-           self.write_object(object)          
+       self.writer.startElement('scene', {})
 
-       self.writer.endElement("scene")       
+        if self.export['camera']:
+            # write all cameras
+            for camera in Blender.Camera.Get():
+                self.write_camera(camera)
+
+        if self.export['object']:
+            # write all mesh objects
+            for object in Blender.Object.Get():
+                if Blender.NMesh.GetRaw(object.name):
+                    self.write_object(object)
+            
+       self.writer.endElement('scene')       
 
     def write(self):
-       print "Writing to file (%s)..." % self.filename
+       print 'Writing to file (%s)...' % self.filename
 
-       self.file = open(self.filename, "wt")
+       self.file = open(self.filename, 'wt')
        self.writer = XmlWriter(self.file)
 
        self.writer.startDocument()
@@ -224,16 +252,23 @@
 
         self.settings.setdefault('filename', 'untitled.xml')
         self.settings.setdefault('charset', 'UTF-8')
-        self.settings.setdefault('float-format', "%.8f")
+        self.settings.setdefault('float-format', '%.8f')
+
+        self.settings.setdefault('export',
+                                 {'camera' : True,
+                                  'object' : True,
+                                  'mesh'   : True}
+                                 )
 
     def save_settings(self):
         Registry.SetKey('Usata', self.settings)
 
     def export(self):
-        print "Exporting scene..."
+        print 'Exporting scene...'
         exporter = XmlExporter(self.settings['filename'],
                                self.settings['charset'],
-                               self.settings['float-format'])
+                               self.settings['float-format'],
+                               self.settings['export'])
         exporter.write()
 
     def draw(self):
@@ -244,21 +279,29 @@
         # draw title
         glColor3f(0.0, 0.0, 0.0)
         glRasterPos2i(50, 500)
-        Blender.Draw.Text(_("Usata XML file exporter"))
+        Blender.Draw.Text(_('Usata XML file exporter'))
 
         # filename entry button        
-        self.output_name = Blender.Draw.String(_("File: "), EVENT_FILENAME,
+        self.output_name = Blender.Draw.String(_('File: '), EVENT_FILENAME,
                                                50, 400, 400, 20,
                                                self.settings['filename'], 255,
-                                               "Output filename")
+                                               _('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")
+        # export set selection toggles
+        
+        self.export_camera = Blender.Draw.Toggle(_('Camera'), 
EVENT_SELECT_CAMERA,
+                                                    50, 450, 50, 20,
+                                                    
self.settings['export']['camera'],
+                                                    _('Export cameras'))
+
+        self.export_mesh = Blender.Draw.Toggle(_('Mesh'), EVENT_SELECT_MESH,
+                                               110, 450, 50, 20,
+                                               self.settings['export']['mesh'],
+                                               _('Export meshes'))
+        
+        # save/quit buttons
+        Blender.Draw.Button(_('Save'), EVENT_SAVE, 50, 350, 50, 20, _('Save 
file'))
+        Blender.Draw.Button(_('Quit'), EVENT_QUIT, 110, 350, 50, 20, _('Exit 
script'))
 
     def run(self):
         Blender.Draw.Register(self.draw, None, self.handle_event)
@@ -267,6 +310,13 @@
         if event == EVENT_FILENAME:
             self.settings['filename'] = self.output_name.val
 
+        elif event == EVENT_SELECT_CAMERA:
+            self.settings['export']['camera'] = self.export_camera.val
+
+        elif event == EVENT_SELECT_MESH:
+            self.settings['export']['object'] = self.export_mesh.val
+            self.settings['export']['mesh'] = self.export_mesh.val
+
         elif event == EVENT_SAVE:
             self.export()
 
@@ -284,5 +334,5 @@
     gui = GUIControl()
     gui.run()
 
-if __name__ == "__main__":
+if __name__ == '__main__':
     main()




reply via email to

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