I’m hoping this could be a place where we focus and centralise all information and R&D regarding creating custom Geometry Nodes.
My first topic is as follows:
I’ve followed (somewhat) the same approach as @BD3D when creating my custom nodes (classes registration, handler registration, etc). However, it seems as though I have an issue. For example:
If I have “NodeGroupA”, which updates during the “bpy.app.handlers.frame_change_pre” call, all works fine - my node group’s values are updated and viewable via the “Viewer” node.
If, then, I have “NodeGroupB”, which has an instance of “NodeGroupA” contained within it which drives the maths etc, this does not work. It seems as though the instance of “NodeGroupA”, in this case, does not receive a notification to update its values.
Consider a simplified example, where:
“NodeGroupA” is a mimic of the “SceneTime” node
“NodeGroupB” utilises “NodeGroupA” in order to update values
If testable code is required, I’m happy to comply. I hope this makes sense in the meantime.
So, I’ve played around with this more today and found a solution to my issue.
As mentioned, I’ve followed the examples of @BD3D (Extra Nodes), and I’ve updated the “update_node” method from:
def update_node(msg, idname):
for n in [
n for ng in bpy.data.node_groups if (msg in ng) for n in ng.nodes
if (n.bl_idname == idname)
]:
n.update()
return None
To:
def update_node(msg, idname):
for n in [
n for ng in bpy.data.node_groups for n in ng.nodes
if (n.bl_idname == idname)
]:
n.update()
return None
I simply removed any filtering to do with the node group’s handler flag, eg: “extra_node_camera_info_update_needed”, and just updated the node by its bl_idname.
This has allowed - with regards to my original example - “NodeGroupB” to receive its update signal during frame changes, even when it’s a child of “NodeGroupA” (or other). It now seems that all signals are being received.
Some of the approaches I’ve currently taken for the add-on I’m currently building may be of benefit to others. For one; as I’ve created the beginnings of a “Core” library with classes and helpers which will help me during future add-on development. So I’ll continue pushing out to this thread as I learn more about extending the GeometryNodeCustomGroup class, as well as generally discussing things such as: general project structure, tooling, approaches, and more when concerning general Blender add-on development. Who knows - I may eventually release my “Core” library!
I’m working on a plug-in/add-on that allows the user to easily create, manage, and animate credits and titles for film and TV.
I’ve seen what other paid competitors offer, and I feel I can offer at least the same - or better - for Blender.
It will be a paid add-on, but for a small price and at least 10% will go to the Blender Development Fund, and I will be updating my other free add-ons soon as well.
I also have another, much bigger and more complex add-on planned.