Changeset View
Changeset View
Standalone View
Standalone View
io_shape_mdd/export_mdd.py
| Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | def save(context, filepath="", frame_start=1, frame_end=300, fps=25.0, use_rest_frame=False): | ||||
| scene = context.scene | scene = context.scene | ||||
| obj = context.object | obj = context.object | ||||
| if bpy.ops.object.mode_set.poll(): | if bpy.ops.object.mode_set.poll(): | ||||
| bpy.ops.object.mode_set(mode='OBJECT') | bpy.ops.object.mode_set(mode='OBJECT') | ||||
| orig_frame = scene.frame_current | orig_frame = scene.frame_current | ||||
| scene.frame_set(frame_start) | scene.frame_set(frame_start) | ||||
| me = obj.to_mesh(scene, True, 'PREVIEW') | me = obj.to_mesh(context.depsgraph, True) | ||||
| #Flip y and z | #Flip y and z | ||||
| ''' | ''' | ||||
| mat_flip = mathutils.Matrix(((1.0, 0.0, 0.0, 0.0), | mat_flip = mathutils.Matrix(((1.0, 0.0, 0.0, 0.0), | ||||
| (0.0, 0.0, 1.0, 0.0), | (0.0, 0.0, 1.0, 0.0), | ||||
| (0.0, 1.0, 0.0, 0.0), | (0.0, 1.0, 0.0, 0.0), | ||||
| (0.0, 0.0, 0.0, 1.0), | (0.0, 0.0, 0.0, 1.0), | ||||
| )) | )) | ||||
| Show All 11 Lines | def save(context, filepath="", frame_start=1, frame_end=300, fps=25.0, use_rest_frame=False): | ||||
| # Write the header | # Write the header | ||||
| f.write(pack(">2i", numframes, numverts)) | f.write(pack(">2i", numframes, numverts)) | ||||
| # Write the frame times (should we use the time IPO??) | # Write the frame times (should we use the time IPO??) | ||||
| f.write(pack(">%df" % (numframes), *[frame / fps for frame in range(numframes)])) # seconds | f.write(pack(">%df" % (numframes), *[frame / fps for frame in range(numframes)])) # seconds | ||||
| if use_rest_frame: | if use_rest_frame: | ||||
| check_vertcount(me, numverts) | check_vertcount(me, numverts) | ||||
| me.transform(mat_flip * obj.matrix_world) | me.transform(mat_flip @ obj.matrix_world) | ||||
| f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co])) | f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co])) | ||||
| bpy.data.meshes.remove(me, do_unlink=True) | bpy.data.meshes.remove(me) | ||||
| for frame in range(frame_start, frame_end + 1): # in order to start at desired frame | for frame in range(frame_start, frame_end + 1): # in order to start at desired frame | ||||
| scene.frame_set(frame) | scene.frame_set(frame) | ||||
| me = obj.to_mesh(scene, True, 'PREVIEW') | me = obj.to_mesh(context.depsgraph, True) | ||||
| check_vertcount(me, numverts) | check_vertcount(me, numverts) | ||||
| me.transform(mat_flip * obj.matrix_world) | me.transform(mat_flip @ obj.matrix_world) | ||||
| # Write the vertex data | # Write the vertex data | ||||
| f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co])) | f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co])) | ||||
| bpy.data.meshes.remove(me, do_unlink=True) | bpy.data.meshes.remove(me) | ||||
| f.close() | f.close() | ||||
| print('MDD Exported: %r frames:%d\n' % (filepath, numframes - 1)) | print('MDD Exported: %r frames:%d\n' % (filepath, numframes - 1)) | ||||
| scene.frame_set(orig_frame) | scene.frame_set(orig_frame) | ||||
| return {'FINISHED'} | return {'FINISHED'} | ||||