-
Notifications
You must be signed in to change notification settings - Fork 2
/
ImportOperator.py
76 lines (60 loc) · 2.52 KB
/
ImportOperator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import bpy
import json
import yerface_blender.SceneUtilities
import yerface_blender.FIFOReader
class YerFaceImportOperator(bpy.types.Operator):
bl_idname = "yerface.do_import"
bl_label = "Do Import"
bl_description = "Imports YerFace performance capture data to keyframes."
bl_options = {'INTERNAL'}
def execute(self, context):
props = context.scene.yerFaceBlenderProperties
fps = context.scene.render.fps / context.scene.render.fps_base
print("Scene FPS is set to: ", fps)
myReader = yerface_blender.FIFOReader.YerFaceFIFOReader()
myUpdater = yerface_blender.SceneUtilities.YerFaceSceneUpdater(context, myReader, fps)
if props.tickCallback != "":
tickProps = {
'userData': props.tickUserData,
'resetState': True,
'perfcapPacket': {},
'insertKeyframes': True,
'currentFrameNumber': None,
'flushLastFrame': False,
'discardLastFrameData': False,
'samplingMode': None,
'framesPerSecond': fps
}
bpy.app.driver_namespace[props.tickCallback](tickProps)
print("Kicked off Yer-Face import with file: ", props.inputFilePath)
try:
f = open(props.inputFilePath, "r")
except:
print("Failed to open Yer-Face data file!")
return {'CANCELLED'}
lastFrame = None
for line in f:
packetObj = None
try:
packetObj = json.loads(line)
except:
print("Failed parsing a line in the YerFace data file!")
continue
if packetObj == None:
print("Got a NULL entry in the YerFace data file for some reason.")
continue
myReader.insertNextPacket(packetObj)
frame = int((packetObj['meta']['startTime'] * fps) + props.importStartFrame)
if lastFrame is None or frame != lastFrame:
if lastFrame is not None:
discardFrame = False
if lastFrame < props.importStartFrame:
discardFrame = True
myUpdater.flushFrame(lastFrame, discardFrame)
context.scene.frame_set(frame)
myUpdater.runUpdate(insertKeyframes=True, currentFrameNumber=frame)
lastFrame = frame
if lastFrame is not None:
myUpdater.flushFrame(lastFrame)
f.close()
return {'FINISHED'}