diff options
author | Thomas Dinges <blender@dingto.org> | 2011-12-25 17:34:18 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2011-12-25 17:34:18 +0400 |
commit | a06358570e46d675222ad649e33e96561e75c711 (patch) | |
tree | d80da9d480e4d9d5bc52730f32f7e98795dbbb29 /intern/cycles/app/io_export_cycles_xml.py | |
parent | 67effc8aefcde5acc72a67aff76d367e22a091ae (diff) |
Cycles Test App:
* Added some new integrator parameters to the xml reading.
* Added ability to specify window width/height, if not set it uses film/camera width/height.
* Added back the xml exporter script from cycles branch, with modifications to hock up into the UI. To use it, copy the script into 2.61/scripts/startup.
Note: This is intended for developers for now, but the standalone Cycles app has potential to be used as benchmark for example.
Diffstat (limited to 'intern/cycles/app/io_export_cycles_xml.py')
-rw-r--r-- | intern/cycles/app/io_export_cycles_xml.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/intern/cycles/app/io_export_cycles_xml.py b/intern/cycles/app/io_export_cycles_xml.py new file mode 100644 index 00000000000..2314d935214 --- /dev/null +++ b/intern/cycles/app/io_export_cycles_xml.py @@ -0,0 +1,143 @@ +# +# Copyright 2011, Blender Foundation. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +# XML exporter for generating test files, not intended for end users + +import os +import xml.etree.ElementTree as etree +import xml.dom.minidom as dom + +import bpy +from bpy_extras.io_utils import ExportHelper +from bpy.props import PointerProperty, StringProperty + +def strip(root): + root.text = None + root.tail = None + + for elem in root: + strip(elem) + +def write(node, fname): + strip(node) + + s = etree.tostring(node) + s = dom.parseString(s).toprettyxml() + + f = open(fname, "w") + f.write(s) + +class CyclesXMLSettings(bpy.types.PropertyGroup): + @classmethod + def register(cls): + bpy.types.Scene.cycles_xml = PointerProperty( + type=cls, + name="Cycles XML export Settings", + description="Cycles XML export settings") + cls.filepath = StringProperty( + name='Filepath', + description='Filepath for the .xml file', + maxlen=256, + default='', + subtype='FILE_PATH') + + @classmethod + def unregister(cls): + del bpy.types.Scene.cycles_xml + +# User Interface Drawing Code +class RenderButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "render" + + @classmethod + def poll(self, context): + rd = context.scene.render + return rd.engine == 'CYCLES' + + +class PHYSICS_PT_fluid_export(RenderButtonsPanel, bpy.types.Panel): + bl_label = "Cycles XML Exporter" + + def draw(self, context): + layout = self.layout + + cycles = context.scene.cycles_xml + + #layout.prop(cycles, "filepath") + layout.operator("export_mesh.cycles_xml") + + +# Export Operator +class ExportCyclesXML(bpy.types.Operator, ExportHelper): + bl_idname = "export_mesh.cycles_xml" + bl_label = "Export Cycles XML" + + filename_ext = ".xml" + + @classmethod + def poll(cls, context): + return context.active_object != None + + def execute(self, context): + filepath = bpy.path.ensure_ext(self.filepath, ".xml") + + # get mesh + scene = context.scene + object = context.active_object + + if not object: + raise Exception("No active object") + + mesh = object.to_mesh(scene, True, 'PREVIEW') + + if not mesh: + raise Exception("No mesh data in active object") + + # generate mesh node + nverts = "" + verts = "" + P = "" + + for v in mesh.vertices: + P += "%f %f %f " % (v.co[0], v.co[1], v.co[2]) + + for i, f in enumerate(mesh.faces): + nverts += str(len(f.vertices)) + " " + + for v in f.vertices: + verts += str(v) + " " + verts += " " + + node = etree.Element('mesh', attrib={'nverts': nverts, 'verts': verts, 'P': P}) + + # write to file + write(node, filepath) + + return {'FINISHED'} + +def register(): + bpy.utils.register_module(__name__) + +def unregister(): + bpy.utils.unregister_module(__name__) + +if __name__ == "__main__": + register() + |