LAK132 icon

socket_value_update not working

LAK132 | PRO | 10/27/19 10:51:36 AM UTC | 0 ⭐ | 657 👁️ | Never ⏰ | []
Python |

3.77 KB

|

None

|

0 👍

/

0 👎

 
bl_info = {"name": "Test2.8", "category": "Node"}
 
import bpy
import nodeitems_utils
 
class CustomNodeTree(bpy.types.NodeTree):
    """Custom Node Tree"""
    bl_idname = "CustomNodeTree"
    bl_label = "Custom Node Tree"
    bl_icon = "NODETREE"
 
    @classmethod
    def poll(tree_class, context):
        return True
 
# class CustomProperty(bpy.types.PropertyGroup):
#     pass
 
# class CustomSocket(byp.types.NodeSocket):
#     pass
 
class CustomNode(bpy.types.Node, CustomNodeTree):
    """Custom Node"""
    bl_idname = "CustomNode"
    bl_label = "Custom Node"
    bl_icon = "OBJECT_DATA"
 
    color: bpy.props.FloatVectorProperty(name="color", size=4, subtype='COLOR')
 
    # socket_value_update(context)
    #   Update after property changes
    def socket_value_update(self, context):
        print(str(self) + ": socket_value_update")
 
    def read_input(self, name):
        if name not in self.inputs:
            return None
        for link in self.inputs[name].links:
            if link.is_valid:
                return link.from_socket.default_value
        return self.inputs[name].default_value
 
    # update()
    #   Update on editor changes
    def update(self):
        print(str(self) + ": update")
        self.color = self.read_input("Input")
        self.outputs["Output"].default_value = self.color
        print(str(self.inputs["Input"]))
        print(str(self.color))
        print(str(self.outputs["Output"]))
 
    # init(context)
    #   Initialize a new instance of this node
    def init(self, context):
        print("init")
        self.inputs.new("NodeSocketColor", "Input")
        self.outputs.new("NodeSocketColor", "Output")
 
    # copy(node)
    #   Initialize a new instance of this node from an existing node
    #   Parameters: node (Node, (never None)) - Node, Existing node to copy
    def copy(self, node):
        print(str(self) + ": copy from " + str(node))
        self.inputs["Input"].default_value = node.inputs["Input"].default_value
        self.color = node.color
 
    # draw_buttons(context, layout)
    #   Draw node buttons
    #   Parameters: layout (UILayout, (never None)) - Layout, Layout in the UI
    def draw_buttons(self, context, layout):
        layout.prop(self, "color")
 
    # draw_buttons_ext(context, layout)
    #   Draw node buttons in the sidebar
    #   Parameters: layout (UILayout, (never None)) - Layout, Layout in the UI
    def draw_buttons_ext(self, context, layout):
        layout.prop(self, "color")
 
    # draw_label()
    #   Returns a dynamic label string
    #   Returns: Label
    #   Return type: string, (never None)
    def draw_label(self):
        return "Custom Node"
 
    @classmethod
    def poll(node_class, context):
        return True
 
class CustomNodeCategory(nodeitems_utils.NodeCategory):
    @classmethod
    def poll(category_class, context):
        return True
 
node_categories = [
    CustomNodeCategory(
        "CUSTOM",
        "Custom",
        items = [
            nodeitems_utils.NodeItem("CustomNode")
        ]
    )
]
 
registered = False
 
classes = (
    CustomNodeTree,
    CustomNode,
)
 
class_reg, class_unreg = bpy.utils.register_classes_factory(classes)
 
def register():
    class_reg()
    nodeitems_utils.register_node_categories("CUSTOM", node_categories)
    registered = True
 
def unregister():
    try:
        nodeitems_utils.unregister_node_categories("CUSTOM")
    except:
        print("Failed to unregister CUSTOM")
    class_unreg()
    registered = False
 
if __name__ == "__main__":
    print("\n")
    try:
        unregister()
    except:
        print("Failed to unregister")
    # try:
    #     register()
    # except:
    #     print("Failed to register")
    register()

Comments