Skip to content

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

@atticus-lv

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()

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