Crash: Simultaneously altering multiple properties causes race condition in BLField.__get__ #65

Open
opened 2024-05-06 21:22:40 +02:00 by so-rose · 5 comments

Log:

# Blender 4.1.0, Commit date: 2024-03-25 20:42, Hash 40a5e739e270
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.ops.node.select(deselect_all=True, location=(344, 236))  # Operator
bpy.ops.node.select(deselect_all=True, location=(344, 236))  # Operator
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0.54  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = -0.48  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.03  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0.09  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.63  # Property
bpy.ops.node.select(deselect_all=True, location=(324, 136))  # Operator
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.51  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 1  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[1] = 1  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[1] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.ops.node.select(deselect_all=True, location=(345, 237))  # Operator
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.03  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0.6  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0.84  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 2.64  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0  # Property
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-8.15973, 40.8253, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
Saved "demo.blend"  # Info
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.6  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.75  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x'  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y'  # Property
Saved "demo.blend"  # Info
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(378, 344))  # Operator
bpy.ops.node.link(detach=False, drag_start=(-1058.99, 1183.81))  # Operator
bpy.ops.node.select(toggle=True, location=(597, 179))  # Operator
bpy.ops.node.select(extend=False, location=(597, 179))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = 0.696  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 1.11  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = 0.183  # Property
bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = -0.117  # Property

# backtrace
blender() [0xf007f0]
blender() [0x82acdc]
/lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7f8991497d60]
blender() [0x13745c0]
blender() [0x137467d]
blender() [0x1374923]
blender() [0x1378864]
blender() [0x1515b94]
blender() [0x1515d92]
blender(PyObject_GetIter+0x14) [0x771a84]
blender(PySequence_Tuple+0x70) [0x7716b0]
blender(_PyEval_EvalFrameDefault+0x4fe6) [0x7da706]
blender() [0x7d4bc7]
blender() [0x77be64]
blender(PyObject_CallFunctionObjArgs+0xa2) [0x5892622]
blender(_PyObject_GenericGetAttrWithDict+0x1dd) [0x7a391d]
blender(_PyObject_LookupAttr+0x6b) [0x7a370b]
blender() [0x7d3223]
blender(_PyEval_EvalFrameDefault+0x14c1) [0x7d6be1]
blender() [0x7d4bc7]
blender() [0x150c651]
blender() [0x137613b]
blender() [0x1629d0f]
blender() [0x163ace5]
blender() [0xf52f4d]
blender() [0xf53c1d]
blender() [0xf546f3]
blender() [0xf45f40]
blender() [0x717a5d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7f8991482d0a]
blender() [0x826bce]

# Python backtrace
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache.py", line 949 in __get__
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 284 in on_prop_changed
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 201 in <lambda>

The PlaneWave node viz went a little wonky right before the crash. I'm noticing that line 949 is doing this a bunch - is there a race condition where it's being read while being written to? Do we need a lock?

Log: ``` # Blender 4.1.0, Commit date: 2024-03-25 20:42, Hash 40a5e739e270 bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.ops.node.select(deselect_all=True, location=(344, 236)) # Operator bpy.ops.node.select(deselect_all=True, location=(344, 236)) # Operator bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0.54 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = -0.48 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.03 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0.09 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.63 # Property bpy.ops.node.select(deselect_all=True, location=(324, 136)) # Operator bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.51 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 1 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[1] = 1 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[1] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.ops.node.select(deselect_all=True, location=(345, 237)) # Operator bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.03 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0.6 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0.84 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 2.64 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[1] = 0 # Property bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-8.15973, 40.8253, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property Saved "demo.blend" # Info bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'z' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'minus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_direction = 'plus' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = -0.6 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0.75 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[3].blfield__raw_value_float = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'x' # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].blfield__injection_axis = 'y' # Property Saved "demo.blend" # Info bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(378, 344)) # Operator bpy.ops.node.link(detach=False, drag_start=(-1058.99, 1183.81)) # Operator bpy.ops.node.select(toggle=True, location=(597, 179)) # Operator bpy.ops.node.select(extend=False, location=(597, 179)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = 0.696 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[2].blfield__raw_value_float2[0] = 1.11 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = 0.183 # Property bpy.data.node_groups["Waveguide"].nodes["Plane Wave Source"].inputs[1].blfield__raw_value_float3[2] = -0.117 # Property # backtrace blender() [0xf007f0] blender() [0x82acdc] /lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7f8991497d60] blender() [0x13745c0] blender() [0x137467d] blender() [0x1374923] blender() [0x1378864] blender() [0x1515b94] blender() [0x1515d92] blender(PyObject_GetIter+0x14) [0x771a84] blender(PySequence_Tuple+0x70) [0x7716b0] blender(_PyEval_EvalFrameDefault+0x4fe6) [0x7da706] blender() [0x7d4bc7] blender() [0x77be64] blender(PyObject_CallFunctionObjArgs+0xa2) [0x5892622] blender(_PyObject_GenericGetAttrWithDict+0x1dd) [0x7a391d] blender(_PyObject_LookupAttr+0x6b) [0x7a370b] blender() [0x7d3223] blender(_PyEval_EvalFrameDefault+0x14c1) [0x7d6be1] blender() [0x7d4bc7] blender() [0x150c651] blender() [0x137613b] blender() [0x1629d0f] blender() [0x163ace5] blender() [0xf52f4d] blender() [0xf53c1d] blender() [0xf546f3] blender() [0xf45f40] blender() [0x717a5d] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7f8991482d0a] blender() [0x826bce] # Python backtrace File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache.py", line 949 in __get__ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 284 in on_prop_changed File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 201 in <lambda> ``` The `PlaneWave` node viz went a little wonky right before the crash. I'm noticing that line 949 is doing this a bunch - is there a race condition where it's being read while being written to? Do we need a lock?
so-rose added the
bug
unconfirmed
labels 2024-05-06 21:22:40 +02:00
so-rose changed title from Crash Report to Crash Report: Visualization read seems to crash Blender occasionally 2024-05-06 21:23:21 +02:00
so-rose added
architecture
and removed
unconfirmed
labels 2024-05-06 21:24:23 +02:00
Poster
Owner

Confirmed (0fbd3752b3363bb898fd8af68f07e19bee39a347): Changing (ex. by click-drag) multiple properties at once invokes each property's update method in separate threads - thus triggering Blender property setters, while at the same time another update method might have made it to trying to use the property __get__ to get the latest data for the GeoNodes tree.

Line 949 in bl_cache.py is where Blender is trying to load a Blender property, while that same property is simultaneously being written to. With this kind of thing, we'd at best get mangled data when the race condition triggers; it's actually quite nice of Blender to crash for us!

Now that we know what it is, it isn't as bad as we'd thought: Changing one property value at a time should be perfectly safe (barring unfortunate shenanigans). With that said, straight crashes are a bit nasty.

Fix

The fix should be easy enough; just guard the part of __set__ and __get__ using a threading.Lock. See https://docs.python.org/3/library/threading.html#.

It's a good idea to also guard the global caches, to prevent mangled data from making it into caches during race-conditions and causing havoc, even after Blender properties themselves aren't causing crashes.

Lock contention really shouldn't be an issue - this race condition isn't being triggered outside of this kind of special case.

**Confirmed** (`0fbd3752b3363bb898fd8af68f07e19bee39a347`): Changing (ex. by click-drag) multiple properties at once invokes each property's `update` method in separate threads - thus triggering Blender property setters, while _at the same time_ another `update` method might have made it to trying to use the property `__get__` to get the latest data for the GeoNodes tree. Line 949 in `bl_cache.py` is where Blender is trying to load a Blender property, while that same property is simultaneously being written to. With this kind of thing, we'd at best get mangled data when the race condition triggers; it's actually quite nice of Blender to crash for us! Now that we know what it is, it isn't as bad as we'd thought: Changing one property value at a time should be perfectly safe (barring unfortunate shenanigans). **With that said**, straight crashes are a bit nasty. # Fix The fix should be easy enough; just guard the part of `__set__` and `__get__` using a `threading.Lock`. See <https://docs.python.org/3/library/threading.html#>. It's a good idea to also guard the global caches, to prevent mangled data from making it into caches during race-conditions and causing havoc, even after Blender properties themselves aren't causing crashes. Lock contention really shouldn't be an issue - this race condition isn't being triggered outside of this kind of special case.
so-rose changed title from Crash Report: Visualization read seems to crash Blender occasionally to Crash: Simultaneously altering multiple properties causes race condition in `BLField.__get__` 2024-05-06 21:37:52 +02:00
Poster
Owner

I'm worried the extent may be further. Sometimes GN modifiers randomly stop displaying (associated with a name change?), then this crash happens. Most curious!

# Blender 4.1.0, Commit date: 2024-03-25 20:42, Hash 40a5e739e270
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(405, 511))  # Operator
Saved "demo.blend"  # Info
Saved "demo.blend"  # Info
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.13  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.13  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__active_unit = 'nanometer'  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 100  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 100  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[3].blfield__raw_value_float = 0  # Property
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(568, 384))  # Operator
bpy.ops.node.add_node(use_transform=True, type="PlaneWaveSourceNodeType")  # Operator
bpy.ops.node.translate_attach_remove_on_cancel(TRANSFORM_OT_translate={"value":(-192.641, 269.11, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":True, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.select(toggle=True, location=(622, 404))  # Operator
bpy.ops.node.select(extend=False, location=(622, 404))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(deselect_all=True, location=(730, 352))  # Operator
bpy.ops.node.delete()  # Operator
bpy.ops.node.select(toggle=True, location=(411, 511))  # Operator
bpy.ops.node.select(extend=False, location=(411, 511))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
Saved "demo.blend"  # Info
bpy.ops.node.select(toggle=True, location=(300, 293))  # Operator
bpy.ops.node.select(extend=False, location=(300, 293))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].blfield__injection_axis = 'y'  # Property
bpy.ops.node.select(toggle=True, location=(438, 509))  # Operator
bpy.ops.node.select(extend=False, location=(438, 509))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(681, 379))  # Operator
bpy.ops.node.select(extend=False, location=(681, 379))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.066  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.108  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[0] = 0.189  # Property
bpy.ops.node.select(toggle=True, location=(480, 445))  # Operator
bpy.ops.node.select(extend=False, location=(480, 445))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.12  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.075  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.075  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__active_unit = 'nanometer'  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 10  # Property
bpy.ops.node.select(toggle=True, location=(764, 278))  # Operator
bpy.ops.node.select(extend=False, location=(764, 278))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.171  # Property
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(449, 453))  # Operator
bpy.ops.node.link(detach=False, drag_start=(-1039.58, 1114.17))  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.159  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0  # Property
bpy.context.space_data.display_mode = 'SCENES'  # Property
bpy.context.space_data.display_mode = 'VIEW_LAYER'  # Property
bpy.context. = True  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 75  # Property
bpy.context. = True  # Property
Saved "demo.blend"  # Info
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
Saved "demo.blend"  # Info
Saved "demo.blend"  # Info
bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__active_unit = 'nanometer'  # Property
bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__active_unit = 'micrometer'  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 62.5  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 10  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[4].blfield__raw_value_float = 0.649  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[4].blfield__raw_value_float = 0.556  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 100.123  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 231.55  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 250  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 250  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 50  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 167.96  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 50  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 50  # Property
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(416, 486))  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__active_unit = 'micrometer'  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.5  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.5  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.25  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.26  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__active_unit = 'micrometer'  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.1255  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.125  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.203  # Property
bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__raw_value_float3[0] = 0.476  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.209  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.238  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.601  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.5  # Property
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.25  # Property
Saved "demo.blend"  # Info
bpy.context. = True  # Property
bpy.ops.node.select(toggle=True, location=(222, 444))  # Operator
bpy.ops.node.select(extend=False, location=(222, 444))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(709, 203))  # Operator
bpy.ops.node.select(extend=False, location=(709, 203))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(571, 201))  # Operator
bpy.ops.node.select(extend=False, location=(571, 201))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(288, 213))  # Operator
bpy.ops.node.select(extend=False, location=(288, 213))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
Saved "demo.blend"  # Info
bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(709.393, -51.5329, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}})  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(348, 396))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-20.9767, -40.0811, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(701, 334))  # Operator
bpy.ops.node.link(detach=False, drag_start=(960.202, -852.362))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(270, 349))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(201, 223))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-57.2092, -36.264, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.link(detach=False, drag_start=(-50.3757, -1157.63))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(43.8604, 43.8985, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(145, 195))  # Operator
bpy.ops.node.link(detach=False, drag_start=(-229.631, -1180.53))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(330, 388))  # Operator
bpy.ops.node.delete()  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(720, 380))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-730.371, 26.7208, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
Saved "demo.blend"  # Info
bpy.data.node_groups["Waveguide"].nodes["EH Field Monitor.002"].sim_node_name = "EH In"  # Property
Saved "demo.blend"  # Info
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(66, 197))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-3.81395, 43.8985, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(319, 401))  # Operator
bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(648.371, -38.1726, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}})  # Operator
bpy.ops.node.delete()  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(441, 344))  # Operator
bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(383.302, 34.3553, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}})  # Operator
bpy.ops.node.select(toggle=True, location=(667, 371))  # Operator
bpy.ops.node.select(extend=False, location=(667, 371))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(438, 352))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(143, 213))  # Operator
bpy.ops.node.link(detach=False, drag_start=(-233.445, -1146.18))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(258, 228))  # Operator
bpy.ops.node.link(detach=False, drag_start=(-14.1432, -1117.55))  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(457, 344))  # Operator
bpy.ops.node.delete()  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(651, 363))  # Operator
bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-389.023, -15.269, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={})  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(505, 349))  # Operator
bpy.ops.node.link(detach=False, drag_start=(456.88, -886.605))  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.outliner.item_rename()  # Operator
bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(463, 319))  # Operator
bpy.data.node_groups["Waveguide"].nodes["EH Field Monitor.003"].sim_node_name = "EH Out"  # Property
Saved "demo.blend"  # Info
Saved "demo.blend"  # Info
bpy.ops.node.select(toggle=True, location=(452, 398))  # Operator
bpy.ops.node.select(extend=False, location=(452, 398))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(276, 212))  # Operator
bpy.ops.node.select(extend=False, location=(276, 212))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.context. = True  # Property
bpy.context. = False  # Property
bpy.ops.node.select(toggle=True, location=(469, 423))  # Operator
bpy.ops.node.select(extend=False, location=(469, 423))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.ops.node.select(toggle=True, location=(363, 423))  # Operator
bpy.ops.node.select(extend=False, location=(363, 423))  # Operator
bpy.ops.blender_maxwell.connectviewernode()  # Operator
bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.04  # Property

# backtrace
blender() [0xf007f0]
blender() [0x82acdc]
/lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7f3712697d60]
blender() [0x13745c0]
blender() [0x137467d]
blender() [0x1374923]
blender() [0x1378864]
blender() [0x1515b94]
blender() [0x1515d92]
blender(PyObject_GetIter+0x14) [0x771a84]
blender(PySequence_Tuple+0x70) [0x7716b0]
blender(_PyEval_EvalFrameDefault+0x4fe6) [0x7da706]
blender() [0x7d4bc7]
blender() [0x77be64]
blender(PyObject_CallFunctionObjArgs+0xa2) [0x5892622]
blender(_PyObject_GenericGetAttrWithDict+0x1dd) [0x7a391d]
blender(_PyObject_LookupAttr+0x6b) [0x7a370b]
blender() [0x7d3223]
blender(_PyEval_EvalFrameDefault+0x14c1) [0x7d6be1]
blender() [0x7d4bc7]
blender() [0x150c651]
blender() [0x137613b]
blender() [0x1629d0f]
blender() [0x163ace5]
blender() [0xf52f4d]
blender() [0xf53c1d]
blender() [0xf546f3]
blender() [0xf45f40]
blender() [0x717a5d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7f3712682d0a]
blender() [0x826bce]

# Python backtrace
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache.py", line 949 in __get__
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 284 in on_prop_changed
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 201 in <lambda>
I'm worried the extent may be further. Sometimes GN modifiers randomly stop displaying (associated with a name change?), then this crash happens. Most curious! ``` # Blender 4.1.0, Commit date: 2024-03-25 20:42, Hash 40a5e739e270 bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(405, 511)) # Operator Saved "demo.blend" # Info Saved "demo.blend" # Info bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.13 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.13 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__active_unit = 'nanometer' # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 100 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 100 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[3].blfield__raw_value_float = 0 # Property bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(568, 384)) # Operator bpy.ops.node.add_node(use_transform=True, type="PlaneWaveSourceNodeType") # Operator bpy.ops.node.translate_attach_remove_on_cancel(TRANSFORM_OT_translate={"value":(-192.641, 269.11, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":True, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.select(toggle=True, location=(622, 404)) # Operator bpy.ops.node.select(extend=False, location=(622, 404)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(deselect_all=True, location=(730, 352)) # Operator bpy.ops.node.delete() # Operator bpy.ops.node.select(toggle=True, location=(411, 511)) # Operator bpy.ops.node.select(extend=False, location=(411, 511)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator Saved "demo.blend" # Info bpy.ops.node.select(toggle=True, location=(300, 293)) # Operator bpy.ops.node.select(extend=False, location=(300, 293)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].blfield__injection_axis = 'y' # Property bpy.ops.node.select(toggle=True, location=(438, 509)) # Operator bpy.ops.node.select(extend=False, location=(438, 509)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(681, 379)) # Operator bpy.ops.node.select(extend=False, location=(681, 379)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.066 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.108 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[0] = 0.189 # Property bpy.ops.node.select(toggle=True, location=(480, 445)) # Operator bpy.ops.node.select(extend=False, location=(480, 445)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.12 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.075 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.075 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__active_unit = 'nanometer' # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 10 # Property bpy.ops.node.select(toggle=True, location=(764, 278)) # Operator bpy.ops.node.select(extend=False, location=(764, 278)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.171 # Property bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(449, 453)) # Operator bpy.ops.node.link(detach=False, drag_start=(-1039.58, 1114.17)) # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.159 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0 # Property bpy.context.space_data.display_mode = 'SCENES' # Property bpy.context.space_data.display_mode = 'VIEW_LAYER' # Property bpy.context. = True # Property bpy.context. = True # Property bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 75 # Property bpy.context. = True # Property Saved "demo.blend" # Info bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.context. = True # Property Saved "demo.blend" # Info Saved "demo.blend" # Info bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__active_unit = 'nanometer' # Property bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__active_unit = 'micrometer' # Property bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.context. = True # Property bpy.context. = False # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 62.5 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 10 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[4].blfield__raw_value_float = 0.649 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[4].blfield__raw_value_float = 0.556 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 100.123 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 231.55 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 250 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 250 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 50 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 167.96 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 50 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 50 # Property bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(416, 486)) # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__active_unit = 'micrometer' # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.5 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.5 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.25 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.26 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__active_unit = 'micrometer' # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.1255 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[2] = 0.125 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.203 # Property bpy.data.node_groups["Waveguide"].nodes["Box Structure"].inputs[2].blfield__raw_value_float3[0] = 0.476 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.209 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.238 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.601 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[1] = 0.5 # Property bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[2].blfield__raw_value_float2[0] = 0.25 # Property Saved "demo.blend" # Info bpy.context. = True # Property bpy.ops.node.select(toggle=True, location=(222, 444)) # Operator bpy.ops.node.select(extend=False, location=(222, 444)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(709, 203)) # Operator bpy.ops.node.select(extend=False, location=(709, 203)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(571, 201)) # Operator bpy.ops.node.select(extend=False, location=(571, 201)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(288, 213)) # Operator bpy.ops.node.select(extend=False, location=(288, 213)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.outliner.item_activate(deselect_all=True) # Operator Saved "demo.blend" # Info bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(709.393, -51.5329, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}}) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(348, 396)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-20.9767, -40.0811, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(701, 334)) # Operator bpy.ops.node.link(detach=False, drag_start=(960.202, -852.362)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(270, 349)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(201, 223)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-57.2092, -36.264, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.link(detach=False, drag_start=(-50.3757, -1157.63)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(43.8604, 43.8985, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(145, 195)) # Operator bpy.ops.node.link(detach=False, drag_start=(-229.631, -1180.53)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(330, 388)) # Operator bpy.ops.node.delete() # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(720, 380)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-730.371, 26.7208, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator Saved "demo.blend" # Info bpy.data.node_groups["Waveguide"].nodes["EH Field Monitor.002"].sim_node_name = "EH In" # Property Saved "demo.blend" # Info bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(66, 197)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-3.81395, 43.8985, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(319, 401)) # Operator bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(648.371, -38.1726, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}}) # Operator bpy.ops.node.delete() # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(441, 344)) # Operator bpy.ops.node.duplicate_move(NODE_OT_duplicate={"keep_inputs":False, "linked":False}, TRANSFORM_OT_translate={"value":(383.302, 34.3553, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}, NODE_OT_translate_attach={"TRANSFORM_OT_translate":{"value":(0, 0, 0), "orient_type":'GLOBAL', "orient_matrix":((0, 0, 0), (0, 0, 0), (0, 0, 0)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, "NODE_OT_attach":{}}) # Operator bpy.ops.node.select(toggle=True, location=(667, 371)) # Operator bpy.ops.node.select(extend=False, location=(667, 371)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.outliner.item_activate(deselect_all=True) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(438, 352)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(143, 213)) # Operator bpy.ops.node.link(detach=False, drag_start=(-233.445, -1146.18)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(258, 228)) # Operator bpy.ops.node.link(detach=False, drag_start=(-14.1432, -1117.55)) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(457, 344)) # Operator bpy.ops.node.delete() # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(651, 363)) # Operator bpy.ops.node.translate_attach(TRANSFORM_OT_translate={"value":(-389.023, -15.269, 0), "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":True, "use_snap_edit":True, "use_snap_nonedit":True, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "use_duplicated_keyframes":False, "view2d_edge_pan":True, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False}, NODE_OT_attach={}) # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(505, 349)) # Operator bpy.ops.node.link(detach=False, drag_start=(456.88, -886.605)) # Operator bpy.ops.outliner.item_activate(deselect_all=True) # Operator bpy.ops.outliner.item_rename() # Operator bpy.ops.node.select(deselect_all=True, select_passthrough=True, location=(463, 319)) # Operator bpy.data.node_groups["Waveguide"].nodes["EH Field Monitor.003"].sim_node_name = "EH Out" # Property Saved "demo.blend" # Info Saved "demo.blend" # Info bpy.ops.node.select(toggle=True, location=(452, 398)) # Operator bpy.ops.node.select(extend=False, location=(452, 398)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(276, 212)) # Operator bpy.ops.node.select(extend=False, location=(276, 212)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.outliner.item_activate(deselect_all=True) # Operator bpy.context. = True # Property bpy.context. = False # Property bpy.ops.node.select(toggle=True, location=(469, 423)) # Operator bpy.ops.node.select(extend=False, location=(469, 423)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.ops.node.select(toggle=True, location=(363, 423)) # Operator bpy.ops.node.select(extend=False, location=(363, 423)) # Operator bpy.ops.blender_maxwell.connectviewernode() # Operator bpy.data.node_groups["Waveguide"].nodes["Gaussian Beam Source"].inputs[1].blfield__raw_value_float3[1] = 0.04 # Property # backtrace blender() [0xf007f0] blender() [0x82acdc] /lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7f3712697d60] blender() [0x13745c0] blender() [0x137467d] blender() [0x1374923] blender() [0x1378864] blender() [0x1515b94] blender() [0x1515d92] blender(PyObject_GetIter+0x14) [0x771a84] blender(PySequence_Tuple+0x70) [0x7716b0] blender(_PyEval_EvalFrameDefault+0x4fe6) [0x7da706] blender() [0x7d4bc7] blender() [0x77be64] blender(PyObject_CallFunctionObjArgs+0xa2) [0x5892622] blender(_PyObject_GenericGetAttrWithDict+0x1dd) [0x7a391d] blender(_PyObject_LookupAttr+0x6b) [0x7a370b] blender() [0x7d3223] blender(_PyEval_EvalFrameDefault+0x14c1) [0x7d6be1] blender() [0x7d4bc7] blender() [0x150c651] blender() [0x137613b] blender() [0x1629d0f] blender() [0x163ace5] blender() [0xf52f4d] blender() [0xf53c1d] blender() [0xf546f3] blender() [0xf45f40] blender() [0x717a5d] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7f3712682d0a] blender() [0x826bce] # Python backtrace File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache.py", line 949 in __get__ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 284 in on_prop_changed File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 201 in <lambda> ```
so-rose started working 2024-05-07 14:53:27 +02:00
Poster
Owner

All right, I'm fed up; we're doing this!

All right, I'm fed up; we're doing this!
so-rose stopped working 2024-05-07 20:03:48 +02:00
5 hours 10 minutes
Poster
Owner

Mid-refactor of bl_cache. Dinner then continue.

Mid-refactor of `bl_cache`. Dinner then continue.
so-rose started working 2024-05-07 20:35:16 +02:00
so-rose stopped working 2024-05-08 14:10:04 +02:00
17 hours 34 minutes
Poster
Owner

Possibly a variant?

bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'lazyvaluefunc'  # Property
bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'array'  # Property
Python: Traceback (most recent call last):
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/outputs/viewer.py", line 44, in execute
    node.print_data_to_console()
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/outputs/viewer.py", line 122, in print_data_to_console
    data = self._compute_input('Any', kind=self.print_kind, optional=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache/keyed_cache.py", line 106, in __call__
    value = self.func(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/base.py", line 585, in _compute_input
    else bl_socket.compute_data(kind=kind)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 639, in compute_data
    linked_values = [link.from_socket.compute_data(kind) for link in self.links]
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 639, in <listcomp>
    linked_values = [link.from_socket.compute_data(kind) for link in self.links]
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 629, in compute_data
    return self.node.compute_output(self.name, kind=kind)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache/keyed_cache.py", line 106, in __call__
    value = self.func(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/base.py", line 639, in compute_output
    return output_socket_methods[0](self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/events.py", line 303, in decorated
    return method(
           ^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/analysis/math/operate_math.py", line 340, in compute_array
    *params.scaled_func_args(unit_system),
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/contracts/flow_kinds/params.py", line 59, in scaled_func_args
    return [
           ^
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/contracts/flow_kinds/params.py", line 61, in <listcomp>
    if arg not in symbol_values
       ^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'MutableDenseMatrix'  # Error
bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'lazyvaluefunc'  # Property
bpy.ops.node.select(deselect_all=True, location=(576, 236))  # Operator
Python: Traceback (most recent call last):
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/node_tree.py", line 389, in update
    to_socket.on_link_removed(from_socket)
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 338, in on_link_removed
    self.trigger_event(ct.FlowEvent.LinkChanged)
  File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 407, in trigger_event
    self.node.trigger_event(
    ^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'trigger_event'  # Error

# backtrace
blender() [0xf007f0]
blender() [0x82acdc]
/lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7fc695497d60]
blender() [0xefb8e0]
blender() [0x141d7cc]
blender() [0x1386bbe]
blender() [0x1386fef]
blender() [0x1512ccc]
blender(PyObject_Repr+0x51) [0x7a4201]
blender(_PyEval_EvalFrameDefault+0xa8d) [0x7d61ad]
blender() [0x7d4bc7]
blender(_PyObject_FastCall+0x3a) [0x77b67a]
blender() [0x58cd553]
blender() [0x151abe5]
blender() [0x142eded]
blender() [0x954041]
blender() [0x958c41]
blender() [0x94ebf1]
blender() [0x1e8a07f]
blender() [0x1e8a27c]
blender() [0xf4dbda]
blender() [0xf4e261]
blender() [0xf4e78e]
blender() [0x1629cd5]
blender() [0x163abda]
blender() [0xf52f4d]
blender() [0xf53c1d]
blender() [0xf546f3]
blender() [0xf45f40]
blender() [0x717a5d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7fc695482d0a]
blender() [0x826bce]

# Python backtrace
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 621 in to_repr
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 869 in _traverse
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 874 in traverse
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 377 in <dictcomp>
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 376 in extract
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 292 in from_exception
  File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 76 in excepthook
Possibly a variant? ``` bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'lazyvaluefunc' # Property bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'array' # Property Python: Traceback (most recent call last): File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/outputs/viewer.py", line 44, in execute node.print_data_to_console() File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/outputs/viewer.py", line 122, in print_data_to_console data = self._compute_input('Any', kind=self.print_kind, optional=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache/keyed_cache.py", line 106, in __call__ value = self.func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/base.py", line 585, in _compute_input else bl_socket.compute_data(kind=kind) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 639, in compute_data linked_values = [link.from_socket.compute_data(kind) for link in self.links] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 639, in <listcomp> linked_values = [link.from_socket.compute_data(kind) for link in self.links] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 629, in compute_data return self.node.compute_output(self.name, kind=kind) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/utils/bl_cache/keyed_cache.py", line 106, in __call__ value = self.func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/base.py", line 639, in compute_output return output_socket_methods[0](self) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/events.py", line 303, in decorated return method( ^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/analysis/math/operate_math.py", line 340, in compute_array *params.scaled_func_args(unit_system), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/contracts/flow_kinds/params.py", line 59, in scaled_func_args return [ ^ File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/contracts/flow_kinds/params.py", line 61, in <listcomp> if arg not in symbol_values ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: unhashable type: 'MutableDenseMatrix' # Error bpy.data.node_groups["Tester"].nodes["Viewer"].blfield__print_kind = 'lazyvaluefunc' # Property bpy.ops.node.select(deselect_all=True, location=(576, 236)) # Operator Python: Traceback (most recent call last): File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/node_tree.py", line 389, in update to_socket.on_link_removed(from_socket) File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 338, in on_link_removed self.trigger_event(ct.FlowEvent.LinkChanged) File "/home/sofus/.config/blender/4.1/scripts/addons/blender_maxwell/node_trees/maxwell_sim_nodes/sockets/base.py", line 407, in trigger_event self.node.trigger_event( ^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'trigger_event' # Error # backtrace blender() [0xf007f0] blender() [0x82acdc] /lib/x86_64-linux-gnu/libc.so.6(+0x38d60) [0x7fc695497d60] blender() [0xefb8e0] blender() [0x141d7cc] blender() [0x1386bbe] blender() [0x1386fef] blender() [0x1512ccc] blender(PyObject_Repr+0x51) [0x7a4201] blender(_PyEval_EvalFrameDefault+0xa8d) [0x7d61ad] blender() [0x7d4bc7] blender(_PyObject_FastCall+0x3a) [0x77b67a] blender() [0x58cd553] blender() [0x151abe5] blender() [0x142eded] blender() [0x954041] blender() [0x958c41] blender() [0x94ebf1] blender() [0x1e8a07f] blender() [0x1e8a27c] blender() [0xf4dbda] blender() [0xf4e261] blender() [0xf4e78e] blender() [0x1629cd5] blender() [0x163abda] blender() [0xf52f4d] blender() [0xf53c1d] blender() [0xf546f3] blender() [0xf45f40] blender() [0x717a5d] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7fc695482d0a] blender() [0x826bce] # Python backtrace File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 621 in to_repr File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 869 in _traverse File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/pretty.py", line 874 in traverse File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 377 in <dictcomp> File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 376 in extract File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 292 in from_exception File "/home/sofus/src/blender_maxwell/dev/.cached-dev-dependencies/rich/traceback.py", line 76 in excepthook ```
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Total Time Spent: 22 hours 45 minutes
so-rose
22 hours 45 minutes
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: so-rose/blender_maxwell#65
There is no content yet.