Custom Node Tree Refresh Problem?

Hi All,

I am working on a custom node tree. I want some generic nodes that I can connect to form more complex systems. However, I am finding that custom nodes do not refresh as I expected.

In this setup you can see I have a Float, Int, String and List available as output. They all can be connected to the string input of the Label node which attempts to display the results. This does work but when I change the value of the Int I do not see the value of the Label update.

Does anyone know how events flow or how to “poll/push” data through the tree? Is there a refresh tree method?

If anyone has time, pull down the ZIP file and install and activate the renode AddOn. Then open the accompanying BLEND file and observe the custom node tree in action. Change values and connections and you will see that updates are spotty at best. It does kind of work, but not all of the time.

Attachments


renode_103113.zip (155 KB)

IIRC the nodes api is missing a whole lot of update pushes – one of those things I always forget about when I actually have free time and anybody who (re)discovers it never files a bug report so it has yet to be fixed.

If you change a value via python and doesn’t update the UI then it’s a bug…unless it’s a CurveMapping which has an update() function because it’s all wonky.

Thanks for the advice. I like to try to make sure it is not my bad coding that is the problem before I bother developers with something that might not be a bug. But with Custom Node Trees being so new and not a lot of working examples I guess I will submit a report.
https://projects.blender.org/tracker/index.php?func=detail&aid=37282&group_id=9&atid=498

Ok,

I spent some time rebuilding the AddOn with just a single Integer node and I got node Refresh to work. I completely abandoned the system update events. I realized that the value I needed was in available in the draw event. However, you can not assign self a value or change self while you are drawing self (makes sense). But gosh, that is really where I want to run my line of code (the event has fired and I have the update value available). So I used a thread, launched from the draw event, to issue the same exact line of code but in a different context. It worked. Now my inputs route to my outputs. The node socket connector dims and brightens depending upon if the socket is connected to another socket.

I put together an Integer and Float node as an example of the above mentioned update threading technique.

Copy the blendgraph AddOn to your AddOns folder and activate it. Open the included BLEND file to see the nodes in action.

Attachments

blendgraph_110413.zip (90.5 KB)


interesting
is it possible to make like a range node with this ?
or and if then else node may be?
and have an output node showing the value

then how is this call in nodes editor
is it like calling a script node

thanks

I am working on a List node. This way we can get lists of polygons, vertices, groups or just custom data sets into a processing loop. Math nodes, iterators are also on my Radar for development. Looks like Blender can finally emulate Cinema4D expresso and the Houdini node based approach to everything.

then how is this call in nodes editor
is it like calling a script node

When your node gets updated, you can run your script in that event. Your context is the Node, however, not a ScreenSpace. This seems to be how Nikitron is creating his surface in the Servchok 0.2 AddOn.

Just an update. I have made some progress on the List node. I have altered the architecture so the list is actually a Collection property of the Node, not the Node Socket. This way there is only one list and the socket simply acts as a conduit for connecting nodes to the internal node list. This should be more memory efficient rather than embedding a collection inside each socket as I had previously done.

Updates are still a bit of a mystery to me, however my thread hack seems to be holding in this current scenario.

The String socket holds the value of the currently selected list item. The List socket will relay the internal list to another node that accepts List socket input. The Index input socket allows you to animate the list.


I got List to List processing working. When the list comes from an external node the +/- buttons are not displayed. You can not alter a source list from a target container but the Index can still be driven from another node.


I also implemented a simple timeline node. So now you can use Current Frame to drive other node inputs.


I was just about to post a question asking if there was a way to see values from nodes, looks like you are working on a similar problem. I tried to use your addon but I got an error message. Good luck and I hope you continue on this!


Sorry about that. I think that is a simple typo by me. I changed the name of utils to utility and I must have missed one somewhere. It may be line #31 of init.py.

Here is an example of two more nodes I created. ZFill and Concat. Mixing them with the Timeline node you can use the frame number to create a datablock name based upon the current frame.