2016-06-01 5 views
0

Wenn ich dieses Skript ausführen:Blender Skalenwert nicht aktualisiert

import bpy 
import math 

s = bpy.context.scene.frame_start 
e = bpy.context.scene.frame_end 

values = [] 
print(s) 
print(e) 

for i in range(s,e): 
    bpy.context.scene.frame_current = i 
    print(i) 
    v = (bpy.context.object.scale[1]) 
    bpy.context.object.scale[0] = i 
    print('At frame ',str(i), ' value ' ,str(v)) 
    values.extend([bpy.context.object.scale[1]]) 

Es gibt mir die richtige Anzahl von Frames, aber der Wert ist immer die gleiche, auch wenn der Maßstab [1] das Objekt gebacken zu einem Sound, so dass es immer zwischen den Frames wechselt.

Es sieht so aus, als ob Blender den Wert nicht aktualisiert und immer den Wert des Rahmens annimmt, während dessen der Text ausgeführt wird.

Gibt es eine Möglichkeit, den Wert während der Ausführung des Codes in Echtzeit zu aktualisieren?

Antwort

0

Sie suchen nach den falschen Werten.

Sie haben v = scale[1] dann scale[0] = i gesetzt und dann print(v) so Ihre Lese scale.y und Ändern scale.x dann bei scale.y suchen

Es ist besser, scene.frame_set() verwenden Frames über Python zu ändern.

Ein anderer Ansatz einen Schlüsselwert zu bekommen fcurve.evaluate(frame)

import bpy 

s = bpy.context.scene.frame_start 
e = bpy.context.scene.frame_end 

values = [] 
f = bpy.context.object.animation_data.action.fcurves.find('scale', index=1) 

for i in range(s,e): 
    v = f.evaluate(i) 
    print('At frame ',str(i), ' value ' ,str(v)) 
    values.extend([v]) 

zu verwenden ist und wenn Sie die Werte Keyframe planen, brauchen Sie keine Frames zu ändern, wie Sie den Rahmen in keyframe_insert(data_path, frame=f)

angeben
+0

Ich setze bpy.context.object.scale [0], um zu versuchen, de scale [1] -Wert zu aktualisieren, der sich immer ändert, weil ich es zu einem Sound gebacken habe, aber auch wenn sich die Skala [1] immer ändert , es druckt immer den gleichen Wert –

+0

Verwenden von 'frame_set()' sollte geben Sie die Werte aus dem gebackenen Sound. Andernfalls könnten Sie versuchen, ['fcurve.evaluate (frame)'] (https://www.blender.org/api/blender_python_api_current/bpy.types.FCurve.html#bpy.types.FCurve.evaluate) – sambler

+0

fcurve.evaluate zu verwenden (Rahmen) gearbeitet, Werte stimmen jetzt –