# PoseWithBODY&Scale.py # Writes a pose file that includes pose data for the BODY actor, and includes scaling data for all actors. # by Les Bentley, 06/July/2009. # Modified from a script by svdl. 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.TypeCode()==poser.kParmCodeASCALE: return "scale" if parm.TypeCode()==poser.kParmCodeXSCALE: return "scaleX" if parm.TypeCode()==poser.kParmCodeYSCALE: return "scaleY" if parm.TypeCode()==poser.kParmCodeZSCALE: return "scaleZ" if parm.TypeCode()==poser.kParmCodeXROT: return "rotateX" if parm.TypeCode()==poser.kParmCodeYROT: return "rotateY" if parm.TypeCode()==poser.kParmCodeZROT: return "rotateZ" if parm.TypeCode()==poser.kParmCodeXTRAN: return "translateX" if parm.TypeCode()==poser.kParmCodeYTRAN: return "translateY" if parm.TypeCode()==poser.kParmCodeZTRAN: return "translateZ" if parm.TypeCode()==poser.kParmCodeGRASP: return "handGrasp" if parm.TypeCode()==poser.kParmCodeTGRASP: return "thumbGrasp" if parm.TypeCode()==poser.kParmCodeSPREAD: return "handSpread" return None 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 (getParmType(parm)!=None): 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 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")