-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path__init__.py
More file actions
128 lines (96 loc) · 3.96 KB
/
Copy path__init__.py
File metadata and controls
128 lines (96 loc) · 3.96 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
_needs_reload = "bpy" in locals()
import bpy
from .tracking_toolkit import operators, preferences, properties, ui, utils
from .tracking_toolkit.xr_core import actions, tracking, core
if _needs_reload:
import importlib
utils = importlib.reload(utils)
actions = importlib.reload(actions)
properties = importlib.reload(properties)
preferences = importlib.reload(preferences)
operators = importlib.reload(operators)
ui = importlib.reload(ui)
tracking = importlib.reload(tracking)
core = importlib.reload(core)
print("Tracking Toolkit Reloaded")
@bpy.app.handlers.persistent
def scene_update_callback(scene, _):
"""
When a tracker object is selected in the scene, make it active in the list too.
This does not work with bones.
"""
xr_context = tracking.get_context()
if xr_context.use_bones:
return
selected = [obj for obj in scene.objects if obj.select_get()]
if not selected:
return
active = selected[-1]
for tracker in xr_context.trackers:
if tracker.naming.role_string == active.get("role_string"):
if xr_context.selected_tracker != tracker.index:
xr_context["selected_tracker"] = tracker.index
@bpy.app.handlers.persistent
def load_post_callback(*_):
"""
Stop XR whenever a new file is loaded.
"""
tracking.stop_preview()
def register():
print("Loading Tracking Toolkit...")
# Props
bpy.utils.register_class(properties.XRState)
bpy.utils.register_class(properties.XRTrackerNaming)
bpy.utils.register_class(properties.XRTracker)
bpy.utils.register_class(properties.XRContext)
# Prefs
bpy.utils.register_class(preferences.PreferenceNaming)
bpy.utils.register_class(preferences.ResetNicknamesOperator)
bpy.utils.register_class(preferences.Preferences)
preferences.initialize_preferences()
# Operators
bpy.utils.register_class(operators.ToggleActiveOperator)
bpy.utils.register_class(operators.CreateRefsOperator)
bpy.utils.register_class(operators.ToggleRecordOperator)
# Contexts
bpy.types.WindowManager.XRState = bpy.props.PointerProperty(type=properties.XRState)
bpy.types.Scene.XRContext = bpy.props.PointerProperty(type=properties.XRContext)
# UI
bpy.utils.register_class(ui.PANEL_UL_TrackerList)
bpy.utils.register_class(ui.RecorderPanel)
# Handlers
if scene_update_callback not in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.depsgraph_update_post.append(scene_update_callback)
if load_post_callback not in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.load_post.append(load_post_callback)
print("Loaded Tracking Toolkit")
def unregister():
print("Unloading Tracking Toolkit...")
tracking.stop_preview()
# UI
bpy.utils.unregister_class(ui.PANEL_UL_TrackerList)
bpy.utils.unregister_class(ui.RecorderPanel)
# Contexts
del bpy.types.Scene.XRContext
del bpy.types.WindowManager.XRState
# Classes
bpy.utils.unregister_class(operators.ToggleRecordOperator)
bpy.utils.unregister_class(operators.CreateRefsOperator)
bpy.utils.unregister_class(operators.ToggleActiveOperator)
# Prefs
bpy.utils.unregister_class(preferences.Preferences)
bpy.utils.unregister_class(preferences.ResetNicknamesOperator)
bpy.utils.unregister_class(preferences.PreferenceNaming)
# Props
bpy.utils.unregister_class(properties.XRContext)
bpy.utils.unregister_class(properties.XRTracker)
bpy.utils.unregister_class(properties.XRTrackerNaming)
bpy.utils.unregister_class(properties.XRState)
# Handlers
if scene_update_callback in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.depsgraph_update_post.remove(scene_update_callback)
if load_post_callback in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.depsgraph_update_post.remove(load_post_callback)
print("Unloaded Tracking Toolkit")
if __name__ == "__main__":
register()