[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4033] trunk/py/scripts/addons/ io_shape_mdd: initialize start_frame/end_frame from the scene, dont transform the verts on export.

Campbell Barton ideasman42 at gmail.com
Sun Dec 9 15:06:37 CET 2012


Revision: 4033
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4033
Author:   campbellbarton
Date:     2012-12-09 14:06:34 +0000 (Sun, 09 Dec 2012)
Log Message:
-----------
initialize start_frame/end_frame from the scene, dont transform the verts on export.

Modified Paths:
--------------
    trunk/py/scripts/addons/io_shape_mdd/__init__.py
    trunk/py/scripts/addons/io_shape_mdd/export_mdd.py
    trunk/py/scripts/addons/io_shape_mdd/import_mdd.py

Modified: trunk/py/scripts/addons/io_shape_mdd/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_shape_mdd/__init__.py	2012-12-09 12:47:03 UTC (rev 4032)
+++ trunk/py/scripts/addons/io_shape_mdd/__init__.py	2012-12-09 14:06:34 UTC (rev 4033)
@@ -40,7 +40,7 @@
 
 
 import bpy
-from bpy.props import StringProperty, IntProperty
+from bpy.props import StringProperty, IntProperty, FloatProperty
 from bpy_extras.io_utils import ExportHelper, ImportHelper
 
 
@@ -70,16 +70,16 @@
 
     @classmethod
     def poll(cls, context):
-        ob = context.active_object
-        return (ob and ob.type == 'MESH')
+        obj = context.active_object
+        return (obj and obj.type == 'MESH')
 
-    def execute(self, context):
-
-        # initialize from scene if unset
+    def invoke(self, context, event):
         scene = context.scene
-        if not self.frame_start:
-            self.frame_start = scene.frame_current
+        self.frame_start = scene.frame_start
 
+        return super().invoke(context, event)
+
+    def execute(self, context):
         keywords = self.as_keywords(ignore=("filter_glob",))
 
         from . import import_mdd
@@ -98,16 +98,16 @@
 
     minframe = 1
     maxframe = 300000
-    minfps = 1
-    maxfps = 120
+    minfps = 1.0
+    maxfps = 120.0
 
     # List of operator properties, the attributes will be assigned
     # to the class instance from the operator settings before calling.
-    fps = IntProperty(
+    fps = FloatProperty(
             name="Frames Per Second",
             description="Number of frames/second",
             min=minfps, max=maxfps,
-            default=25,
+            default=25.0,
             )
     frame_start = IntProperty(
             name="Start Frame",
@@ -127,16 +127,15 @@
         obj = context.active_object
         return (obj and obj.type == 'MESH')
 
-    def execute(self, context):
-        # initialize from scene if unset
+    def invoke(self, context, event):
         scene = context.scene
-        if not self.frame_start:
-            self.frame_start = scene.frame_start
-        if not self.frame_end:
-            self.frame_end = scene.frame_end
-        if not self.fps:
-            self.fps = scene.render.fps
+        self.frame_start = scene.frame_start
+        self.frame_end = scene.frame_end
+        self.fps = scene.render.fps / scene.render.fps_base
 
+        return super().invoke(context, event)
+
+    def execute(self, context):
         keywords = self.as_keywords(ignore=("check_existing", "filter_glob"))
 
         from . import export_mdd

Modified: trunk/py/scripts/addons/io_shape_mdd/export_mdd.py
===================================================================
--- trunk/py/scripts/addons/io_shape_mdd/export_mdd.py	2012-12-09 12:47:03 UTC (rev 4032)
+++ trunk/py/scripts/addons/io_shape_mdd/export_mdd.py	2012-12-09 14:06:34 UTC (rev 4033)
@@ -51,7 +51,7 @@
         raise Exception('Error, number of verts has changed during animation, cannot export')
 
 
-def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
+def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25.0):
     """
     Blender.Window.WaitCursor(1)
 
@@ -70,16 +70,18 @@
     me = obj.to_mesh(scene, True, 'PREVIEW')
 
     #Flip y and z
+    '''
     mat_flip = mathutils.Matrix(((1.0, 0.0, 0.0, 0.0),
                                  (0.0, 0.0, 1.0, 0.0),
                                  (0.0, 1.0, 0.0, 0.0),
                                  (0.0, 0.0, 0.0, 1.0),
                                  ))
+    '''
+    mat_flip = mathutils.Matrix()
 
     numverts = len(me.vertices)
 
     numframes = frame_end - frame_start + 1
-    fps = float(fps)
     f = open(filepath, 'wb')  # no Errors yet:Safe to create file
 
     # Write the header
@@ -89,21 +91,11 @@
     f.write(pack(">%df" % (numframes), *[frame / fps for frame in range(numframes)]))  # seconds
 
     #rest frame needed to keep frames in sync
-    """
-    Blender.Set('curframe', frame_start)
-    me_tmp.getFromObject(obj.name)
-    """
-
     check_vertcount(me, numverts)
     me.transform(mat_flip * obj.matrix_world)
     f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co]))
 
     for frame in range(frame_start, frame_end + 1):  # in order to start at desired frame
-        """
-        Blender.Set('curframe', frame)
-        me_tmp.getFromObject(obj.name)
-        """
-
         scene.frame_set(frame)
         me = obj.to_mesh(scene, True, 'PREVIEW')
         check_vertcount(me, numverts)
@@ -112,16 +104,9 @@
         # Write the vertex data
         f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co]))
 
-    """
-    me_tmp.vertices= None
-    """
     f.close()
 
     print('MDD Exported: %r frames:%d\n' % (filepath, numframes - 1))
-    """
-    Blender.Window.WaitCursor(0)
-    Blender.Set('curframe', orig_frame)
-    """
     scene.frame_set(orig_frame)
 
     return {'FINISHED'}

Modified: trunk/py/scripts/addons/io_shape_mdd/import_mdd.py
===================================================================
--- trunk/py/scripts/addons/io_shape_mdd/import_mdd.py	2012-12-09 12:47:03 UTC (rev 4032)
+++ trunk/py/scripts/addons/io_shape_mdd/import_mdd.py	2012-12-09 14:06:34 UTC (rev 4033)
@@ -34,7 +34,42 @@
 import bpy
 from struct import unpack
 
+def obj_update_frame(file, scene, obj, fr, step):
 
+    # Insert new shape key
+    new_shapekey = obj.shape_key_add()
+    new_shapekey.name = ("frame_%.4d" % fr)
+
+    obj.active_shape_key_index = len(obj.data.shape_keys.key_blocks) - 1
+    index = len(obj.data.shape_keys.key_blocks) - 1
+    obj.show_only_shape_key = True
+
+    verts = obj.data.shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].data
+
+    for v in verts:  # 12 is the size of 3 floats
+        v.co[:] = unpack('>3f', file.read(12))
+
+    # me.update()
+    obj.show_only_shape_key = False
+
+    # insert keyframes
+    shape_keys = obj.data.shape_keys
+
+    scene.frame_current -= step
+    obj.data.shape_keys.key_blocks[index].value = 0.0
+    shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
+
+    scene.frame_current += step
+    obj.data.shape_keys.key_blocks[index].value = 1.0
+    shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
+
+    scene.frame_current += step
+    obj.data.shape_keys.key_blocks[index].value = 0.0
+    shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
+
+    obj.data.update()
+
+
 def load(operator, context, filepath, frame_start=0, frame_step=1):
 
     scene = context.scene
@@ -60,42 +95,7 @@
 
     scene.frame_current = frame_start
 
-    def UpdateMesh(ob, fr, step):
-
-        # Insert new shape key
-        new_shapekey = obj.shape_key_add()
-        new_shapekey.name = ("frame_%.4d" % fr)
-
-        obj.active_shape_key_index = len(obj.data.shape_keys.key_blocks) - 1
-        index = len(obj.data.shape_keys.key_blocks) - 1
-        obj.show_only_shape_key = True
-
-        verts = obj.data.shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].data
-
-        for v in verts:  # 12 is the size of 3 floats
-            v.co[:] = unpack('>3f', file.read(12))
-
-        # me.update()
-        obj.show_only_shape_key = False
-
-        # insert keyframes
-        shape_keys = obj.data.shape_keys
-
-        scene.frame_current -= step
-        obj.data.shape_keys.key_blocks[index].value = 0.0
-        shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
-
-        scene.frame_current += step
-        obj.data.shape_keys.key_blocks[index].value = 1.0
-        shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
-
-        scene.frame_current += step
-        obj.data.shape_keys.key_blocks[index].value = 0.0
-        shape_keys.key_blocks[len(obj.data.shape_keys.key_blocks) - 1].keyframe_insert("value")
-
-        obj.data.update()
-
     for i in range(frames):
-        UpdateMesh(obj, i, frame_step)
+        obj_update_frame(file, scene, obj, i, frame_step)
 
     return {'FINISHED'}



More information about the Bf-extensions-cvs mailing list