# MOR pose writer # svdl, 2007 import poser import os, string def GetERCInfluence(parm): # Figures out how much of the current parameter's value is contributed by ERC slaving curValue=parm.Value() parm.SetValue(0) newValue=parm.Value() parm.SetValue(curValue-newValue) return newValue def getParmType(parm): if parm.IsMorphTarget(): return "targetGeom" if parm.IsValueParameter(): return "valueParm" def writeParmCode(parm): pType=getParmType(parm) pName=parm.InternalName() pValue=parm.Value()-GetERCInfluence(parm) PZ2Text="\t\t%s %s\n\t\t\t{\n\t\t\tkeys\n\t\t\t\t{\n\t\t\t\tk 0 %f\n\t\t\t\t}\n\t\t\t}\n" % (pType,pName,pValue) return PZ2Text def writeActorCode(act): PZ2Text="actor %s\n\t{\n\tchannels\n\t\t{\n""" % act.InternalName() for parm in act.Parameters(): if parm.IsMorphTarget() or parm.IsValueParameter(): PZ2Text+=writeParmCode(parm) PZ2Text+="\t\t}\n\t}\n" return PZ2Text def writeAllActors(rootActor,fl): fl.write(writeActorCode(rootActor)) print "Writing actor %s ..." %(rootActor.Name()) poser.Scene().ProcessSomeEvents(1) for act in rootActor.Children(): writeAllActors(act,fl) def writePoseCode(fig,filename): PZ2Text="{\nversion\n\t{\n\tnumber 4\n\t}\n\n" f=open(filename,'wt') f.write(PZ2Text) writeAllActors(fig.ParentActor(),f) f.write("}") f.close() startDir=os.path.join(os.path.dirname(poser.AppLocation()),"runtime","libraries","pose") Chooser=poser.DialogFileChooser(poser.kDialogFileChooserSave,None,"Save MOR pose as",startDir) fig=poser.Scene().CurrentFigure() if(Chooser.Show()): fName=Chooser.Path() del Chooser poser.Scene().ProcessSomeEvents() if (fName): if fName[-3:] !="pz2": fName+=".pz2" writePoseCode(fig,fName) poser.DialogSimple.MessageBox("Done") else: poser.DialogSimple.MessageBox("Exiting script")