Skip to content

NodeSocketMenu setting default value before linking a menu node will cause type error #132

Description

@atticus-lv

Reproduce

image
Error Message: TypeError: bpy_struct: item.attr = val: enum "A" not found in ()
I think it will need a socket test for linking

Generate codes

import bpy, mathutils

#initialize geometry_nodes node group
def geometry_nodes_node_group():
    geometry_nodes = bpy.data.node_groups.new(type = 'GeometryNodeTree', name = "Geometry Nodes")

    geometry_nodes.color_tag = 'NONE'
    geometry_nodes.description = ""

    geometry_nodes.is_modifier = True
    
    #geometry_nodes interface
    #Socket Geometry
    geometry_socket = geometry_nodes.interface.new_socket(name = "Geometry", in_out='OUTPUT', socket_type = 'NodeSocketGeometry')
    geometry_socket.attribute_domain = 'POINT'
    
    #Socket Geometry
    geometry_socket_1 = geometry_nodes.interface.new_socket(name = "Geometry", in_out='INPUT', socket_type = 'NodeSocketGeometry')
    geometry_socket_1.attribute_domain = 'POINT'
    
    #Socket Menu
    menu_socket = geometry_nodes.interface.new_socket(name = "Menu", in_out='INPUT', socket_type = 'NodeSocketMenu')
    menu_socket.default_value = "A"
    menu_socket.attribute_domain = 'POINT'
    
    
    #initialize geometry_nodes nodes
    #node Group Input
    group_input = geometry_nodes.nodes.new("NodeGroupInput")
    group_input.name = "Group Input"
    
    #node Group Output
    group_output = geometry_nodes.nodes.new("NodeGroupOutput")
    group_output.name = "Group Output"
    group_output.is_active_output = True
    
    #node Menu Switch
    menu_switch = geometry_nodes.nodes.new("GeometryNodeMenuSwitch")
    menu_switch.name = "Menu Switch"
    menu_switch.active_index = 1
    menu_switch.data_type = 'GEOMETRY'
    menu_switch.enum_items.clear()
    menu_switch.enum_items.new("A")
    menu_switch.enum_items[0].description = ""
    menu_switch.enum_items.new("B")
    menu_switch.enum_items[1].description = ""
    
    #node Transform Geometry
    transform_geometry = geometry_nodes.nodes.new("GeometryNodeTransform")
    transform_geometry.name = "Transform Geometry"
    transform_geometry.mode = 'COMPONENTS'
    #Translation
    transform_geometry.inputs[1].default_value = (0.0, 0.0, 0.0)
    #Rotation
    transform_geometry.inputs[2].default_value = (0.0, 0.0, 0.0)
    #Scale
    transform_geometry.inputs[3].default_value = (1.0, 1.0, 1.0)
    
    
    
    
    #Set locations
    group_input.location = (-348.4444580078125, -20.017568588256836)
    group_output.location = (284.4449768066406, -14.679553031921387)
    menu_switch.location = (51.776405334472656, -25.382600784301758)
    transform_geometry.location = (-119.3329086303711, -149.3565216064453)
    
    #Set dimensions
    group_input.width, group_input.height = 140.0, 100.0
    group_output.width, group_output.height = 140.0, 100.0
    menu_switch.width, menu_switch.height = 140.0, 100.0
    transform_geometry.width, transform_geometry.height = 140.0, 100.0
    
    #initialize geometry_nodes links
    #group_input.Geometry -> transform_geometry.Geometry
    geometry_nodes.links.new(group_input.outputs[0], transform_geometry.inputs[0])
    #transform_geometry.Geometry -> menu_switch.B
    geometry_nodes.links.new(transform_geometry.outputs[0], menu_switch.inputs[2])
    #group_input.Geometry -> menu_switch.A
    geometry_nodes.links.new(group_input.outputs[0], menu_switch.inputs[1])
    #menu_switch.Output -> group_output.Geometry
    geometry_nodes.links.new(menu_switch.outputs[0], group_output.inputs[0])
    #group_input.Menu -> menu_switch.Menu
    geometry_nodes.links.new(group_input.outputs[1], menu_switch.inputs[0])
    return geometry_nodes

geometry_nodes = geometry_nodes_node_group()

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions