From 818afda046e6cbc6db7a0e77bba8e9cceb33d99f Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Thu, 21 Apr 2011 14:04:05 +0000 Subject: Tag addons for Blender 2.57a release --- io_shape_mdd/import_mdd.py | 102 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 io_shape_mdd/import_mdd.py (limited to 'io_shape_mdd/import_mdd.py') diff --git a/io_shape_mdd/import_mdd.py b/io_shape_mdd/import_mdd.py new file mode 100644 index 00000000..0fdc78cb --- /dev/null +++ b/io_shape_mdd/import_mdd.py @@ -0,0 +1,102 @@ +# ##### 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 ##### + +# + +# mdd importer by Bill L.Nieuwendorp +# conversion to blender 2.5: Ivo Grigull (loolarge) +# +# Warning if the vertex order or vertex count differs from the +# origonal model the mdd was Baked out from their will be Strange +# behavior +# +# vertex animation to ShapeKeys with ipo and gives the frame a value of 1.0 +# A modifier to read mdd files would be Ideal but thats for another day :) +# +# Please send any fixes,updates,bugs to Slow67_at_Gmail.com +# Bill Niewuendorp + +import bpy +from struct import unpack + + +def load(operator, context, filepath, frame_start=0, frame_step=1): + + scene = context.scene + obj = context.object + + print('\n\nimporting mdd %r' % filepath) + + if bpy.ops.object.mode_set.poll(): + bpy.ops.object.mode_set(mode='OBJECT') + + file = open(filepath, 'rb') + frames, points = unpack(">2i", file.read(8)) + time = unpack((">%df" % frames), file.read(frames * 4)) + + print('\tpoints:%d frames:%d' % (points, frames)) + + # If target object doesn't have Basis shape key, create it. + try: + num_keys = len(obj.data.shape_keys.keys) + except: + basis = obj.shape_key_add() + basis.name = "Basis" + obj.data.update() + + scene.frame_current = frame_start + + def UpdateMesh(ob, fr): + + # Insert new shape key + new_shapekey = obj.shape_key_add() + new_shapekey.name = ("frame_%.4d" % fr) + new_shapekey_name = new_shapekey.name + + obj.active_shape_key_index = len(obj.data.shape_keys.keys) - 1 + index = len(obj.data.shape_keys.keys) - 1 + obj.show_only_shape_key = True + + verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys) - 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 -= 1 + obj.data.shape_keys.keys[index].value = 0.0 + shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value") + + scene.frame_current += 1 + obj.data.shape_keys.keys[index].value = 1.0 + shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value") + + scene.frame_current += 1 + obj.data.shape_keys.keys[index].value = 0.0 + shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value") + + obj.data.update() + + for i in range(frames): + UpdateMesh(obj, i) + + return {'FINISHED'} -- cgit v1.2.3