/[usata]/usata2/src/tools/blender_export.py
ViewVC logotype

Diff of /usata2/src/tools/blender_export.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by Descender, Sun Feb 13 09:42:43 2005 UTC revision 1.4 by Descender, Wed Feb 16 20:27:15 2005 UTC
# Line 1  Line 1 
1  #!BPY  #!BPY
2    
3  """  '''
4  Name: 'Usata'  Name: "Usata"
5  Blender: 234  Blender: 234
6  Group: 'Export'  Group: "Export"
7  Tooltip: 'Export to Usata mesh format.'  Tooltip: "Export to Usata mesh format."
8  """  '''
9  # -*- coding: 'utf-8' -*-  # -*- coding: 'utf-8' -*-
10    
11  # Copyright (C) 2001-2005 Chong Kai Xiong (descender)  # Copyright (C) 2001-2005 Chong Kai Xiong (descender)
# Line 26  Tooltip: 'Export to Usata mesh format.' Line 26  Tooltip: 'Export to Usata mesh format.'
26  # * Add save feedback  # * Add save feedback
27  # * Add more GUI controls  # * Add more GUI controls
28    
29  __author__  = "Chong Kai Xiong"  __author__  = 'Chong Kai Xiong'
30  __version__ = "0.2"  __version__ = '0.2'
31  __email__   = "descender@phreaker.net"  __email__   = 'descender@phreaker.net'
32  __url__     = "http://www.nongnu.org/usata"  __url__     = 'http://www.nongnu.org/usata'
33    
34  import Blender  import Blender
35  import xml.sax.writer  import xml.sax.writer
# Line 40  from Blender     import Registry Line 40  from Blender     import Registry
40    
41  # i18n  # i18n
42    
43  I18N_DOMAIN = "blender-usata-export"  I18N_DOMAIN = 'blender-usata-export'
44    
45  # event numbers  # event numbers
46    
# Line 48  EVENT_NONE = 0 Line 48  EVENT_NONE = 0
48  EVENT_SAVE = 100  EVENT_SAVE = 100
49  EVENT_QUIT = 101  EVENT_QUIT = 101
50  EVENT_FILENAME = 102  EVENT_FILENAME = 102
51    EVENT_SELECT_CAMERA = 103
52    EVENT_SELECT_MESH   = 104
53    
54    
55  _ = gettext.gettext  _ = gettext.gettext
56    
# Line 62  class XmlWriter(xml.sax.writer.PrettyPri Line 65  class XmlWriter(xml.sax.writer.PrettyPri
65    
66  class XmlExporter(object):  class XmlExporter(object):
67    
68      def __init__(self, filename, charset, fp_format):      def __init__(self, filename, charset, fp_format, export):
69          self.filename = filename          self.filename = filename
70          self.charset = charset          self.charset = charset
71          self.fp_format = fp_format          self.fp_format = fp_format
72            self.export = export
73                    
74          self.file = None          self.file = None
75          self.writer = None          self.writer = None
76    
77      def write_vertex(self, vertex):      def write_vertex(self, vertex):
78          self.writer.startElement("vertex", {})          self.writer.startElement('vertex', {})
79    
80          self.writer.startElement("position",          self.writer.startElement('position',
81                                   {"x": self.fp_format % vertex.co[0],                                   {'x': self.fp_format % vertex.co[0],
82                                    "y": self.fp_format % vertex.co[1],                                    'y': self.fp_format % vertex.co[1],
83                                    "z": self.fp_format % vertex.co[2]}                                    'z': self.fp_format % vertex.co[2]}
84                                   )                                   )
85          self.writer.endElement("position")          self.writer.endElement('position')
86    
87          self.writer.startElement("texture",          self.writer.startElement('texture',
88                                   {"u": self.fp_format % vertex.uvco[0],                                   {'u': self.fp_format % vertex.uvco[0],
89                                    "v": self.fp_format % vertex.uvco[1]}                                    'v': self.fp_format % vertex.uvco[1]}
90                                   )                                   )
91          self.writer.endElement("texture")          self.writer.endElement('texture')
92    
93          self.writer.startElement("normal",          self.writer.startElement('normal',
94                                   {"x": self.fp_format % vertex.no[0],                                   {'x': self.fp_format % vertex.no[0],
95                                    "y": self.fp_format % vertex.no[1],                                    'y': self.fp_format % vertex.no[1],
96                                    "z": self.fp_format % vertex.no[2]}                                    'z': self.fp_format % vertex.no[2]}
97                                   )                                   )
98          self.writer.endElement("normal")          self.writer.endElement('normal')
99    
100          self.writer.endElement("vertex")          self.writer.endElement('vertex')
101    
102      def write_vertex_list(self, vertices):      def write_vertex_list(self, vertices):
103          self.writer.startElement("vertices", {})          self.writer.startElement('vertices', {})
104    
105          for vertex in vertices:          for vertex in vertices:
106              self.write_vertex(vertex)              self.write_vertex(vertex)
107    
108          self.writer.endElement("vertices")          self.writer.endElement('vertices')
109    
110      def write_vertex_index_list(self, vertices):      def write_vertex_index_list(self, vertices):
111          self.writer.startElement("vertex_indices", {})          self.writer.startElement('vertex_indices', {})
112    
113          for vertex in vertices:          for vertex in vertices:
114              self.writer.startElement("index", {})              self.writer.startElement('index', {})
115              self.writer.characters("%d" % vertex.index)              self.writer.characters('%d' % vertex.index)
116              self.writer.endElement("index")              self.writer.endElement('index')
117    
118          self.writer.endElement("vertex_indices")          self.writer.endElement('vertex_indices')
119    
120      def write_face(self, face):      def write_face(self, face):
121          self.writer.startElement("face", {})          self.writer.startElement('face', {})
122    
123          self.write_vertex_index_list(face.v)          self.write_vertex_index_list(face.v)
124    
125          self.writer.startElement("material", {})          self.writer.startElement('material', {})
126          self.writer.characters("%d" % face.mat)          self.writer.characters('%d' % face.mat)
127          self.writer.endElement("material")          self.writer.endElement('material')
128    
129          self.writer.endElement("face")          self.writer.endElement('face')
130    
131      def write_face_list(self, faces):      def write_face_list(self, faces):
132    
133          self.writer.startElement("faces", {})          self.writer.startElement('faces', {})
134    
135          for face in faces:          for face in faces:
136              self.write_face(face)              self.write_face(face)
137    
138          self.writer.endElement("faces")                  self.writer.endElement('faces')        
139    
140      def write_camera(self, camera):      def write_camera(self, camera):
141    
142          camera_obj = Blender.Object.Get(camera.getName())          camera_obj = Blender.Object.Get(camera.getName())
143    
144          self.writer.startElement("camera", {})          self.writer.startElement('camera', {})
145    
146          self.writer.startElement("name", {})          self.writer.startElement('name', {})
147          self.writer.characters(camera.getName());          self.writer.characters(camera.getName());
148          self.writer.endElement("name")          self.writer.endElement('name')
149    
150          self.writer.startElement("position",          self.writer.startElement('position',
151                                  {"x": self.fp_format % camera_obj.loc[0],                                   {'x': self.fp_format % camera_obj.loc[0],
152                                   "y": self.fp_format % camera_obj.loc[1],                                    'y': self.fp_format % camera_obj.loc[1],
153                                   "z": self.fp_format % camera_obj.loc[2]}                                    'z': self.fp_format % camera_obj.loc[2]}
154                                  )                                   )
155          self.writer.endElement("position")          self.writer.endElement('position')
156    
157          self.writer.startElement("lens", {})          self.writer.startElement('lens', {})
158          self.writer.characters(self.fp_format % camera.getLens())          self.writer.characters(self.fp_format % camera.getLens())
159          self.writer.endElement("lens")          self.writer.endElement('lens')
160    
161          self.writer.startElement("near", {})          self.writer.startElement('near', {})
162          self.writer.characters(self.fp_format % camera.getClipStart())          self.writer.characters(self.fp_format % camera.getClipStart())
163          self.writer.endElement("near")          self.writer.endElement('near')
164    
165          self.writer.startElement("far", {})          self.writer.startElement('far', {})
166          self.writer.characters(self.fp_format % camera.getClipEnd())          self.writer.characters(self.fp_format % camera.getClipEnd())
167          self.writer.endElement("far")          self.writer.endElement('far')
168    
169          self.writer.endElement("camera")          self.writer.endElement('camera')
170    
171      def write_mesh(self, mesh):      def write_mesh(self, mesh):
172    
173            self.writer.startElement('mesh')
174          self.write_vertex_list(mesh.verts)          self.write_vertex_list(mesh.verts)
175          self.write_face_list(mesh.faces)          self.write_face_list(mesh.faces)
176            self.writer.endElement('mesh')
177    
178      def write_object(self, object):      def write_object(self, object):
179          self.writer.startElement("object", {})          self.writer.startElement('object', {})
180    
181          self.writer.startElement("name", {})          self.writer.startElement('name', {})
182          self.writer.characters(object.name)          self.writer.characters(object.name)
183          self.writer.endElement("name")          self.writer.endElement('name')
184    
185          self.write_mesh(Blender.NMesh.GetRaw(object.name))          location = object.getLocation()
186            self.writer.startElement('position',
187                                     {'x': self.fp_format % location[0],
188                                      'y': self.fp_format % location[1],
189                                      'z': self.fp_format % location[2]}
190                                     )
191            self.writer.endElement('position')
192    
193            orientn = object.getEuler()
194            self.writer.startElement('orientation',
195                                     {'x': self.fp_format % orientn[0],
196                                      'y': self.fp_format % orientn[1],
197                                      'z': self.fp_format % orientn[2]}
198                                     )
199            self.writer.endElement('orientation')
200    
201            size = object.size
202            self.writer.startElement('size',
203                                     {'x': self.fp_format % size[0],
204                                      'y': self.fp_format % size[1],
205                                      'z': self.fp_format % size[2]}
206                                     )
207            self.writer.endElement('size')
208          
209            mesh = Blender.NMesh.GetRaw(object.name)
210            if mesh and self.export['mesh']:
211                self.write_mesh(Blender.NMesh.GetRaw(object.name))
212    
213          self.writer.endElement("object")          self.writer.endElement('object')
214    
215      def write_scene(self):      def write_scene(self):
216          self.writer.startElement("scene", {})          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)            
217    
218          self.writer.endElement("scene")                if self.export['camera']:
219                # write all cameras
220                for camera in Blender.Camera.Get():
221                    self.write_camera(camera)
222    
223            if self.export['object']:
224                # write all mesh objects
225                for object in Blender.Object.Get():
226                    if Blender.NMesh.GetRaw(object.name):
227                        self.write_object(object)
228                
229            self.writer.endElement('scene')      
230    
231      def write(self):      def write(self):
232          print "Writing to file (%s)..." % self.filename          print 'Writing to file (%s)...' % self.filename
233    
234          self.file = open(self.filename, "wt")          self.file = open(self.filename, 'wt')
235          self.writer = XmlWriter(self.file)          self.writer = XmlWriter(self.file)
236    
237          self.writer.startDocument()          self.writer.startDocument()
# Line 224  class GUIControl(object): Line 252  class GUIControl(object):
252    
253          self.settings.setdefault('filename', 'untitled.xml')          self.settings.setdefault('filename', 'untitled.xml')
254          self.settings.setdefault('charset', 'UTF-8')          self.settings.setdefault('charset', 'UTF-8')
255          self.settings.setdefault('float-format', "%.8f")          self.settings.setdefault('float-format', '%.8f')
256    
257            self.settings.setdefault('export',
258                                     {'camera' : True,
259                                      'object' : True,
260                                      'mesh'   : True}
261                                     )
262    
263      def save_settings(self):      def save_settings(self):
264          Registry.SetKey('Usata', self.settings)          Registry.SetKey('Usata', self.settings)
265    
266      def export(self):      def export(self):
267          print "Exporting scene..."          print 'Exporting scene...'
268          exporter = XmlExporter(self.settings['filename'],          exporter = XmlExporter(self.settings['filename'],
269                                 self.settings['charset'],                                 self.settings['charset'],
270                                 self.settings['float-format'])                                 self.settings['float-format'],
271                                   self.settings['export'])
272          exporter.write()          exporter.write()
273    
274      def draw(self):      def draw(self):
# Line 244  class GUIControl(object): Line 279  class GUIControl(object):
279          # draw title          # draw title
280          glColor3f(0.0, 0.0, 0.0)          glColor3f(0.0, 0.0, 0.0)
281          glRasterPos2i(50, 500)          glRasterPos2i(50, 500)
282          Blender.Draw.Text(_("Usata XML file exporter"))          Blender.Draw.Text(_('Usata XML file exporter'))
283    
284          # filename entry button                  # filename entry button        
285          self.output_name = Blender.Draw.String(_("File: "), EVENT_FILENAME,          self.output_name = Blender.Draw.String(_('File: '), EVENT_FILENAME,
286                                                 50, 400, 400, 20,                                                 50, 400, 400, 20,
287                                                 self.settings['filename'], 255,                                                 self.settings['filename'], 255,
288                                                 "Output filename")                                                 _('Output filename'))
289    
290          # save button          # export set selection toggles
291          Blender.Draw.Button(_("Save"), EVENT_SAVE, 50, 350, 50, 20,          
292                              "save file")          self.export_camera = Blender.Draw.Toggle(_('Camera'), EVENT_SELECT_CAMERA,
293                                                        50, 450, 50, 20,
294          # quit button                                                      self.settings['export']['camera'],
295          Blender.Draw.Button(_("Quit"), EVENT_QUIT, 110, 350, 50, 20,                                                      _('Export cameras'))
296                              "exit script")  
297            self.export_mesh = Blender.Draw.Toggle(_('Mesh'), EVENT_SELECT_MESH,
298                                                   110, 450, 50, 20,
299                                                   self.settings['export']['mesh'],
300                                                   _('Export meshes'))
301            
302            # save/quit buttons
303            Blender.Draw.Button(_('Save'), EVENT_SAVE, 50, 350, 50, 20, _('Save file'))
304            Blender.Draw.Button(_('Quit'), EVENT_QUIT, 110, 350, 50, 20, _('Exit script'))
305    
306      def run(self):      def run(self):
307          Blender.Draw.Register(self.draw, None, self.handle_event)          Blender.Draw.Register(self.draw, None, self.handle_event)
# Line 267  class GUIControl(object): Line 310  class GUIControl(object):
310          if event == EVENT_FILENAME:          if event == EVENT_FILENAME:
311              self.settings['filename'] = self.output_name.val              self.settings['filename'] = self.output_name.val
312    
313            elif event == EVENT_SELECT_CAMERA:
314                self.settings['export']['camera'] = self.export_camera.val
315    
316            elif event == EVENT_SELECT_MESH:
317                self.settings['export']['object'] = self.export_mesh.val
318                self.settings['export']['mesh'] = self.export_mesh.val
319    
320          elif event == EVENT_SAVE:          elif event == EVENT_SAVE:
321              self.export()              self.export()
322    
# Line 284  def main(): Line 334  def main():
334      gui = GUIControl()      gui = GUIControl()
335      gui.run()      gui.run()
336    
337  if __name__ == "__main__":  if __name__ == '__main__':
338      main()      main()

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26