[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1324] trunk/py/scripts/addons/ io_export_pc2.py: moved to contrib__

Florian Meyer florianfelix at web.de
Wed Dec 29 23:38:08 CET 2010


Revision: 1324
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=1324
Author:   testscreenings
Date:     2010-12-29 23:38:08 +0100 (Wed, 29 Dec 2010)

Log Message:
-----------
moved to contrib__

Added Paths:
-----------
    trunk/py/scripts/addons/io_export_pc2.py

Copied: trunk/py/scripts/addons/io_export_pc2.py (from rev 1321, contrib/py/scripts/addons/io_export_pc2.py)
===================================================================
--- trunk/py/scripts/addons/io_export_pc2.py	                        (rev 0)
+++ trunk/py/scripts/addons/io_export_pc2.py	2010-12-29 22:38:08 UTC (rev 1324)
@@ -0,0 +1,199 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  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.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_addon_info = {
+    "name": "Export Pointcache (.pc2)",
+    "author": "Florian Meyer (tstscr)",
+    "version": (1, 0),
+    "blender": (2, 5, 4),
+    "api": 33047,
+    "location": "File > Export",
+    "description": "Export Mesh Pointcache to .pc2",
+    "warning": "",
+    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
+        "Scripts/Import-Export/PC2_Pointcache_export",
+    "tracker_url": "https://projects.blender.org/tracker/index.php?"\
+        "func=detail&aid=24703&group_id=153&atid=468",
+    "category": "Import-Export"}
+
+'''
+Usage Notes:
+
+in Maya Mel:
+cacheFile -pc2 1 -pcf "<insert filepath of source>" -f "<insert target filename w/o extension>" -dir "<insert directory path for target>" -format "OneFile";
+
+'''
+
+import bpy
+from bpy.props import *
+import mathutils, math, struct
+from os import remove
+import time
+from io_utils import ExportHelper
+
+def getSampling(start, end, sampling):
+    samples = [start - sampling
+               + x * sampling
+               for x in range(start, int((end-start)*1/sampling)+1)]
+    return samples
+
+def do_export(context, props, filepath):
+    mat_x90 = mathutils.Matrix.Rotation(-math.pi/2, 4, 'X')
+    ob = context.active_object
+    sc = context.scene
+    start = props.range_start
+    end = props.range_end
+    sampling = float(props.sampling)
+    apply_modifiers = props.apply_modifiers
+    me = ob.create_mesh(sc, apply_modifiers, 'PREVIEW')
+    vertCount = len(me.vertices)
+    sampletimes = getSampling(start, end, sampling)
+    sampleCount = len(sampletimes)
+    
+    # Create the header
+    headerFormat='<12ciiffi'
+    headerStr = struct.pack(headerFormat, 'P','O','I','N','T','C','A','C','H','E','2','\0',
+                            1, vertCount, start, sampling, sampleCount)
+
+    file = open(filepath, "wb")
+    file.write(headerStr)
+    
+    for frame in sampletimes:
+        sc.frame_set(frame)
+        me = ob.create_mesh(sc, apply_modifiers, 'PREVIEW')
+        
+        if len(me.vertices) != vertCount:
+            file.close()
+            try:
+                remove(filepath)
+            except:
+                empty = open(filepath, 'w')
+                empty.write('DUMMIFILE - export failed\n')
+                empty.close()
+            print('Export failed. Vertexcount of Object is not constant')
+            return False
+        
+        if props.world_space:
+            me.transform(ob.matrix_world)
+        if props.rot_x90:
+            me.transform(mat_x90)
+        
+        for v in me.vertices:
+            thisVertex = struct.pack('<fff', float(v.co[0]),
+                                             float(v.co[1]),
+                                             float(v.co[2]))
+            file.write(thisVertex)
+    
+    file.flush()
+    file.close()
+    return True
+
+
+###### EXPORT OPERATOR #######
+class Export_pc2(bpy.types.Operator, ExportHelper):
+    '''Exports the active Object as a .pc2 Pointcache file.'''
+    bl_idname = "export_pc2"
+    bl_label = "Export Pointcache (.pc2)"
+
+    filename_ext = ".pc2"
+    
+    rot_x90 = BoolProperty(name="Convert to Y-up",
+                            description="Rotate 90 degrees around X to convert to y-up",
+                            default=True)
+    world_space = BoolProperty(name="Export into Worldspace",
+                            description="Transform the Vertexcoordinates into Worldspace",
+                            default=False)
+    apply_modifiers = BoolProperty(name="Apply Modifiers",
+                            description="Applies the Modifiers",
+                            default=True)
+    range_start = IntProperty(name='Start Frame',
+                            description='First frame to use for Export',
+                            default=1)
+    range_end = IntProperty(name='End Frame',
+                            description='Last frame to use for Export',
+                            default=250)    
+    sampling = EnumProperty(name='Sampling',
+                            description='Sampling --> frames per sample (0.1 yields 10 samples per frame)',
+                            items=[
+                            ('0.01', '0.01', ''),
+                            ('0.05', '0.05', ''),
+                            ('0.1', '0.1', ''),
+                            ('0.2', '0.2', ''),
+                            ('0.25', '0.25', ''),
+                            ('0.5', '0.5', ''),
+                            ('1', '1', ''),
+                            ('2', '2', ''),
+                            ('3', '3', ''),
+                            ('4', '4', ''),
+                            ('5', '5', ''),
+                            ('10', '10', '')],
+                            default='1')
+    
+    @classmethod
+    def poll(cls, context):
+        return context.active_object.type in ['MESH', 'CURVE', 'SURFACE', 'FONT']
+
+    def execute(self, context):
+        start_time = time.time()
+        print('\n_____START_____')
+        props = self.properties
+        filepath = self.filepath
+        filepath = bpy.path.ensure_ext(filepath, self.filename_ext)
+
+        exported = do_export(context, props, filepath)
+        
+        if exported:
+            print('finished export in %s seconds' %((time.time() - start_time)))
+            print(filepath)
+            
+        return {'FINISHED'}
+
+    def invoke(self, context, event):
+        wm = context.window_manager
+
+        if True:
+            # File selector
+            wm.fileselect_add(self) # will run self.execute()
+            return {'RUNNING_MODAL'}
+        elif True:
+            # search the enum
+            wm.invoke_search_popup(self)
+            return {'RUNNING_MODAL'}
+        elif False:
+            # Redo popup
+            return wm.invoke_props_popup(self, event) #
+        elif False:
+            return self.execute(context)
+
+
+### REGISTER ###
+
+def menu_func(self, context):
+    self.layout.operator(Export_pc2.bl_idname, text="Pointcache (.pc2)")
+
+
+def register():
+    bpy.types.INFO_MT_file_export.append(menu_func)
+    #bpy.types.VIEW3D_PT_tools_objectmode.prepend(menu_func)
+
+def unregister():
+    bpy.types.INFO_MT_file_export.remove(menu_func)
+    #bpy.types.VIEW3D_PT_tools_objectmode.remove(menu_func)
+    
+if __name__ == "__main__":
+    register()




More information about the Bf-extensions-cvs mailing list