#!BPY """ Released under the Blender Artistic Licence (BAL) Name: 'ipo cyclic2real' Blender: 241 Group: 'Animation' Tooltip: 'wandelt eine extrapolierte ipo um' """ __author__ = "pat" __version__ = "0.1 - 20060813 -" __email__ = ('Author, pat:psycho3d*de') __url__ = ("Author's website, www.psycho3d.de") __bpydoc__ ="""\ Dieses Script wandelt eine extrapolierte Shape-Ipo um sodass der extrapolierte Teil auch Keys gesetzt hat. Als Hilftsscript für Animesh Bridge """ import Blender as b def apply(): ob = b.Object.GetSelected()[0] ipo = b.NMesh.GetRaw(ob.getData(1)).getKey().getIpo() # alle curves bearbeiten for curve in ipo.curves: keys = [] handles = [] offset = -1 # alle punkte speichern for bez in curve.bezierPoints: # init if offset == -1: offset = bez.pt[0] # keys speichern, relativ zum ersten keys.append([bez.pt[0] - offset, bez.pt[1]]) # damit jeder key seine handles behaelt # und man mischen kann handles.append(bez.handleTypes) # echter startframe frameStart = offset # echter endframe frameEnd = keys[-1][0] + offset myStart = frameStart # letzten wegmachen, sonst isser doppelt keys = keys[:-1] del curve.bezierPoints[ -1 ] # falls wir nicht am anfang sind diff = frameEnd - frameStart while myStart > 1: myStart -= diff skip = 0 # durchloopen bis zum ende while myStart < b.Get('endframe'): # keys adden, relativ zu mystart # handletypen werden beibehalten for i in range(len(keys)): # offset und skip damit die # originale nicht nochmal gesetz werden if myStart != offset: if skip == 0: bez = b.BezTriple.New([keys[i][0] + myStart, keys[i][1], 1]) bez.handleTypes = handles[i] curve.append( bez ) else: skip -= 1 else: skip = 1 # einen schritt weiter und nochmal myStart += diff # nochmal aktualisieren curve.recalc() apply()