I have read the answers to this question, so see you can access Geometry Nodes-generated attributes on an evaluated object using Python.
I'm attempting to access a mesh-wide vector-attribute in a driver. For testing purposes, a fixed vector value is plugged straight into the output node of a Geometry Nodes tree.
However, if I attempt to run v_attr()
, a driver-namespace function, as defined below..
import bpy
def v_attr(obj_name, attr_name):
C = bpy.context
ob = bpy.data.objects [obj_name]
ev_dg = C.evaluated_depsgraph_get()
ev_me = ob.evaluated_get(ev_dg).data
return ev_me.attributes[attr_name].data[0].vector
bpy.app.driver_namespace['v_attr'] = v_attr
#print(v_attr('Plane', 'v_test').y)
.. inside a driver, Blender 3.0b freezes.
Run from the Python console, v_attr()
returns correct values, as a vector, or its components. Permission to auto-run scripts has been granted in Preferences.
I apologise if this is a premature question on a beta-bug, but I doubt that it is.. it's much more likely to be me, maybe misunderstanding the depsgraph altogether? Or permissions?
If there are better ways to store a mesh-wide attribute than duplicated on every point, that would be good...
v_attr('Plane', 'v_test').y
in a scripted expression, to drive the Z location of an Empty. The result, for me, was a hang of (Linux) Blender 3.0b, requiring a kill of the Blender process. $\endgroup$