[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