INDX INDEX_SECTIONŸH,s•Sop/ee_hou_mdd_testŸH,s•ee_hou_mdd_test EE MDD IN.oplib:/Sop/ee_hou_mdd_test?Sop/ee_hou_mdd_testSOP_ee_hou_mdd_testSopH,s•INDX DialogScript‘H,s• PythonCook‘H,s•TypePropertiesOptions§ěH,s•Help “H,s• Tools.shelf “xH,s• CreateScript 5H,s•ExtraFileOptions@H,s•# Dialog script for ee_hou_mdd_test automatically generated 05/15/08 10:32:05 { name ee_hou_mdd_test script ee_hou_mdd_test label "EE MDD IN" help { "" } parm { name "mddfile" label "MDD file" type file default { "0" } range { 0 1 } export none } parm { name "offset" label "Frame offset" type integer default { "0" } range { 0 10 } export none } } # This code is called when instances of this SOP cook. geo = hou.pwd().geometry() # Add code to modify the contents of geo. from struct import unpack from math import floor, modf x = y = 0 xcoord = [] ycoord = [] zcoord = [] frametimes = [] filename = hou.pwd().evalParm("mddfile") offset = hou.pwd().evalParm("offset") f = open(filename, 'rb') #print 'opened ', filename, '\n' totalframes = unpack('>L',f.read(4))[0] #print '# of frames: ', totalframes, '\n' vertices = unpack('>L',f.read(4))[0] #print '# of vertices: ', vertices, '\n' while x < totalframes: frametimes.append( unpack('>f',f.read(4))[0]) # print 'time for frame ', x, '=', times, '\n' x = x + 1 pointnumber_curr = ( floor( hou.frame()-offset ) % totalframes ) * vertices offset = 4 * (2 + totalframes + pointnumber_curr * 3) # bytes-per-value * ( totalframes + totalvertices + frametimes + pointnumber * (x+y+z)) f.seek(offset, 0) for pt in geo.points(): current_frame_pos = ( unpack('>f', f.read(4) )[0], unpack('>f', f.read(4) )[0], unpack('>f', f.read(4) )[0] ) newpos = current_frame_pos if pointnumber_curr < (totalframes-1) * vertices: sub_offset = 4 * 3 * (vertices-1) # offset to this point's position in the nextframe f.seek(sub_offset, 1) next_frame_pos = ( unpack('>f', f.read(4) )[0], unpack('>f', f.read(4) )[0], unpack('>f', f.read(4) )[0] ) f.seek(-sub_offset - 12, 1) # get back to the current frame fractional_frame = modf( hou.frame() )[0] newpos = ((1.0 - fractional_frame) * current_frame_pos[0] + fractional_frame * next_frame_pos[0], (1.0 - fractional_frame) * current_frame_pos[1] + fractional_frame * next_frame_pos[1],-((1.0 - fractional_frame) * current_frame_pos[2] + fractional_frame * next_frame_pos[2]) ) pt.setPosition(newpos) ParmsFromVfl := 1; PrefixDroppedParmName := 1; UseDSParms := 1; ForbidOutsideParms := 1; LockContents := 1; SaveSpareParms := 1; CheckExternal := 1; GzipContents := 1; MakeDefault := 1; PrefixDroppedParmLabel := 1; UnlockOnCreate := 0; SOP SOP $HDA_TABLE/$HDA_NAME Digital Assets # Automatically generated script: Thursday May 15, 10:32 \set noalias = 1 # # Creation script for ee_hou_mdd_test operator # if ( "$arg1" == "" ) then echo This script is intended as a creation script exit endif # Node $arg1 (Sop/ee_hou_mdd_test) opspareds "" $arg1 opexprlanguage -s hscript $arg1