Files
Nexus/2023/scripts/rigging_tools/ngskintools2/api/config.py
2025-11-24 08:27:50 +08:00

48 lines
1.4 KiB
Python

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)