def class_factory(func):
"""create a node class based on a function that has been preprocessed
with get signature or from @stateful"""
if hasattr(func, "cls_bases"):
bases = func.cls_bases + (bpy.types.Node,)
else:
bases = (NodeBase, bpy.types.Node)
cls_dict = {}
cls_name = func.bl_idname
cls_dict['bl_idname'] = func.bl_idname
cls_dict['bl_label'] = func.label
for name, prop in func.properties.items():
#print(name, prop)
cls_dict[name] = prop
if hasattr(func, 'id'):
func_dict, func_list = NodeDynSignature.get_multi(func)
default = func_list[0][0]
cls_dict['mode'] = EnumProperty(items=func_list,
default=default,
update=NodeDynSignature.update_mode)
cls_dict['bl_label'] = func.multi_label
for name in {"draw_buttons", "draw_buttons_ext", "update", "draw_label"}:
attr = getattr(func, name, None)
if callable(attr):
cls_dict[name] = attr
cls = type(cls_name, bases, cls_dict)
func.cls = cls
评论列表
文章目录