INDX INDEX_SECTION˜H#ÑSop/ee_mdd_writer˜H#Ñ ee_mdd_writer EE MDD OUT*oplib:/Sop/ee_mdd_writer?Sop/ee_mdd_writerSOP_ee_mdd_writerSopH#ÑINDX DialogScript>H#Ñ PythonCook>dH#ÑTypePropertiesOptions ¢ìH#ÑHelp ŽKH#Ñ Tools.shelf Ù¦H#Ñ CreateScript'H#Ñ PythonModule¦H"JžExtraFileOptions¨zH#Ñ# Dialog script for ee_mdd_writer automatically generated 05/08/08 21:20:16 { name ee_mdd_writer script ee_mdd_writer label "EE MDD OUT" help { "" } inputlabel 1 "Geometry to be written to .mdd" parm { name "mddfile" label ".mdd file" type file default { "untitled.mdd" } range { 0 1 } export none parmtag { "script_callback_language" "hscript" } } parm { name "startframe" label "Start Frame" type integer default { "1" } range { 0 10 } export none parmtag { "script_callback_language" "hscript" } } parm { name "endframe" label "End Frame" type integer default { "240" } range { 0 100 } export none } parm { name "record" label "Record" type toggle invisible default { "0" } range { 0 1 } export none } parm { name "cookIt" label "Cook it" type button default { "1" } range { 0 1 } export none parmtag { "script_callback_language" "python" } parmtag { "script_callback" "hou.pwd().hdaModule().doTheCook(hou.pwd().evalParm(\"startframe\"), hou.pwd().evalParm(\"endframe\"))" } } } # 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 pack from math import floor, modf x = 1 #frametime = 1.0 / hou.fps() filename = hou.pwd().evalParm("mddfile") startframe = hou.pwd().evalParm("startframe") endframe = hou.pwd().evalParm("endframe") record = hou.pwd().evalParm("record") totalframes = endframe - startframe + 1 vertices = len(geo.points()) if record == True: if hou.frame() == startframe: f = open(filename, 'wb') f.seek(0) f.write(pack('>l', totalframes)) f.write(pack('>l', vertices)) while x <= totalframes: f.write(pack('>f', hou.frameToTime(x))) x = x + 1 if startframe <= hou.frame() <= endframe+1: if hou.frame() > startframe: f = open(filename, 'ab') # currentframe = endframe - hou.frame() # pointnumber_curr = currentframe * vertices # offset = 4 * (2 + totalframes + pointnumber_curr * 3) # bytes-per-value * ( totalframes + totalvertices + frametimes + pointnumber * (x+y+z)) # f.seek(offset, 0) f.seek(0, 2) # 2 = seek to end for pt in geo.points(): f.write(pack('>f', pt.position()[0])) f.write(pack('>f', pt.position()[1])) f.write(pack('>f', -pt.position()[2])) f.close() ParmsFromVfl := 1; PrefixDroppedParmName := 1; UseDSParms := 1; ForbidOutsideParms := 1; LockContents := 1; SaveSpareParms := 1; CheckExternal := 1; GzipContents := 1; MakeDefault := 1; PrefixDroppedParmLabel := 1; UnlockOnCreate := 0; Please pipe in polygons only. The number of points needs to stay constant. SOP SOP $HDA_TABLE/$HDA_NAME Digital Assets # Automatically generated script: Thursday May 08, 21:20 \set noalias = 1 # # Creation script for ee_mdd_writer operator # if ( "$arg1" == "" ) then echo This script is intended as a creation script exit endif # Node $arg1 (Sop/ee_mdd_writer) opspareds ' group { name standardfolder2 label Standard parm { name "mddfile" baseparm export none } parm { name "startframe" baseparm export none } parm { name "endframe" baseparm export none } parm { name "record" baseparm invisible export none } parm { name "cookIt" baseparm export none } } group { name standardfolder2_1 label Spare group { name standardfolder3 label Standard } } ' $arg1 opexprlanguage -s hscript $arg1 def doTheCook(startframe = 1, endframe = 10): hou.pwd().parm("record").set(True) for frame in range(startframe,endframe+2): hou.setFrame(frame) hou.pwd().cook(True) hou.pwd().parm("record").set(False) hou.setFrame(startframe) PythonModule/IsExprPythonModule/IsPythonPythonModule/IsScriptPythonModule/Source