Update
This commit is contained in:
47
2023/scripts/rigging_tools/ngskintools2/api/config.py
Normal file
47
2023/scripts/rigging_tools/ngskintools2/api/config.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import json
|
||||
|
||||
from maya import cmds
|
||||
|
||||
from ngSkinTools2.api.log import getLogger
|
||||
from ngSkinTools2.api.python_compatibility import Object
|
||||
|
||||
log = getLogger("api/layers")
|
||||
|
||||
|
||||
def __define_property__(name, conversion, doc, refresh_on_write=True):
|
||||
return property(
|
||||
lambda self: conversion(self.__load__(name)), lambda self, val: self.__save__(name, conversion(val), refresh=refresh_on_write), doc=doc
|
||||
)
|
||||
|
||||
|
||||
# noinspection PyBroadException
|
||||
class Config(Object):
|
||||
"""
|
||||
per-skin-cluster configuration
|
||||
"""
|
||||
|
||||
influence_colors = __define_property__(
|
||||
"influence_colors",
|
||||
lambda v: {int(k): tuple(float(v[i]) for i in range(3)) for k, v in v.items()},
|
||||
doc="Influence color map [logical index]->(r,g,b)",
|
||||
refresh_on_write=True,
|
||||
)
|
||||
|
||||
def __init__(self, data_node):
|
||||
self.data_node = data_node
|
||||
|
||||
def __load__(self, attr):
|
||||
try:
|
||||
return json.loads(cmds.getAttr(self.data_node + ".config_" + attr))
|
||||
except:
|
||||
return None
|
||||
|
||||
def __save__(self, attr, value, refresh=False):
|
||||
if not cmds.attributeQuery("config_" + attr, node=self.data_node, exists=True):
|
||||
cmds.addAttr(self.data_node, dt="string", longName="config_" + attr)
|
||||
cmds.setAttr(self.data_node + ".config_" + attr, json.dumps(value), type='string')
|
||||
|
||||
if refresh:
|
||||
from ngSkinTools2.api.tools import refresh_screen
|
||||
|
||||
refresh_screen(self.data_node)
|
||||
Reference in New Issue
Block a user