forked from Mwni/blender-animation-retargeting
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata.py
71 lines (60 loc) · 2.21 KB
/
data.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
import bpy
from .utilfuncs import *
class BoneMapping(bpy.types.PropertyGroup):
source: bpy.props.StringProperty()
target: bpy.props.StringProperty()
rest: bpy.props.FloatVectorProperty(size=16, default=(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1))
offset: bpy.props.FloatVectorProperty(size=16, default=(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1))
def is_valid(self):
return (self.source != None
and self.target != None
and len(self.source) > 0
and len(self.target) > 0)
def serialize(self):
return {
'source': self.source,
'target': self.target,
'rest': list(self.rest),
'offset': list(self.offset)
}
def from_serialized(self, m):
self.source = m['source']
self.target = m['target']
self.rest = m['rest']
self.offset = m['offset']
def reset_offset(self):
self.rest = (1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)
self.offset = (1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)
class BonePose(bpy.types.PropertyGroup):
bone: bpy.props.StringProperty()
matrix: bpy.props.FloatVectorProperty(size=16, default=(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1))
class IKLimb(bpy.types.PropertyGroup):
name: bpy.props.StringProperty()
enabled: bpy.props.BoolProperty(default=False)
target_bone: bpy.props.StringProperty(update=lambda self, ctx: state().update_ik_limbs())
origin_bone: bpy.props.StringProperty(update=lambda self, ctx: state().update_ik_limbs())
target_empty: bpy.props.PointerProperty(type=bpy.types.Object)
target_empty_child: bpy.props.PointerProperty(type=bpy.types.Object)
pole_empty: bpy.props.PointerProperty(type=bpy.types.Object)
control_holder: bpy.props.PointerProperty(type=bpy.types.Object)
control_cube: bpy.props.PointerProperty(type=bpy.types.Object)
control_transform: bpy.props.FloatVectorProperty(size=16, default=(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1))
def serialize(self):
return {
'name': self.name,
'enabled': self.enabled,
'target_bone': self.target_bone,
'origin_bone': self.origin_bone,
'control_transform': list(self.control_transform)
}
def from_serialized(self, l):
self.name = l['name']
self.enabled = l['enabled']
self.target_bone = l['target_bone']
self.origin_bone = l['origin_bone']
self.control_transform = l['control_transform']
classes = (
BoneMapping,
BonePose,
IKLimb
)