Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-12-09 18:06:34 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-12-09 18:06:34 +0400
commit4a25a2ba057fd40ddeb766f776d509bbe72cbdee (patch)
treeccde1909afacb6a7e70ed37f530b91bda99c812f
parent9ef28b56eb410fa96a7e733aee2da0d883837dcd (diff)
initialize start_frame/end_frame from the scene, dont transform the verts on export.v2.65av2.65
-rw-r--r--io_shape_mdd/__init__.py39
-rw-r--r--io_shape_mdd/export_mdd.py23
-rw-r--r--io_shape_mdd/import_mdd.py72
3 files changed, 59 insertions, 75 deletions
diff --git a/io_shape_mdd/__init__.py b/io_shape_mdd/__init__.py
index b36bebc0..8a6450b1 100644
--- a/io_shape_mdd/__init__.py
+++ b/io_shape_mdd/__init__.py
@@ -40,7 +40,7 @@ if "bpy" in locals():
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 @@ class ImportMDD(bpy.types.Operator, ImportHelper):
@classmethod
def poll(cls, context):
- ob = context.active_object
- return (ob and ob.type == 'MESH')
-
- def execute(self, context):
+ obj = context.active_object
+ return (obj and obj.type == 'MESH')
- # 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 @@ class ExportMDD(bpy.types.Operator, ExportHelper):
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 @@ class ExportMDD(bpy.types.Operator, ExportHelper):
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
diff --git a/io_shape_mdd/export_mdd.py b/io_shape_mdd/export_mdd.py
index d078083a..aaa2f6a9 100644
--- a/io_shape_mdd/export_mdd.py
+++ b/io_shape_mdd/export_mdd.py
@@ -51,7 +51,7 @@ def check_vertcount(mesh, vertcount):
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 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
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 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
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 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
# 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'}
diff --git a/io_shape_mdd/import_mdd.py b/io_shape_mdd/import_mdd.py
index f5136856..e671e285 100644
--- a/io_shape_mdd/import_mdd.py
+++ b/io_shape_mdd/import_mdd.py
@@ -34,6 +34,41 @@
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):
@@ -60,42 +95,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1):
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'}