43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
class _PreviewState:
|
|
active = False
|
|
saved_values: dict = {}
|
|
|
|
|
|
_ps = _PreviewState()
|
|
|
|
|
|
def guess_shape(mesh_obj, candidates):
|
|
if not mesh_obj or not mesh_obj.data.shape_keys:
|
|
return ''
|
|
keys = [k.name for k in mesh_obj.data.shape_keys.key_blocks]
|
|
for c in candidates:
|
|
if c in keys:
|
|
return c
|
|
return ''
|
|
|
|
|
|
def _save_shapekey_values(mesh_obj):
|
|
_ps.saved_values = {k.name: k.value for k in mesh_obj.data.shape_keys.key_blocks}
|
|
|
|
|
|
def _restore_shapekey_values(mesh_obj):
|
|
for k in mesh_obj.data.shape_keys.key_blocks:
|
|
k.value = _ps.saved_values.get(k.name, 0.0)
|
|
|
|
|
|
def _reset_all_shapekeys(mesh_obj):
|
|
for k in mesh_obj.data.shape_keys.key_blocks:
|
|
k.value = 0.0
|
|
|
|
|
|
def _apply_mix(mesh_obj, mix, intensity):
|
|
_reset_all_shapekeys(mesh_obj)
|
|
keys = mesh_obj.data.shape_keys.key_blocks
|
|
for shape_name, weight in mix:
|
|
if shape_name in keys:
|
|
keys[shape_name].value = weight * intensity
|