Search - User list
Full Version: stroke_radius callback script not called when radius changed
Root » Technical Discussion » stroke_radius callback script not called when radius changed
mtf
I've created an HDA with a stroke node inside, with the Node default state set to stroke.

I have some projection geometry that needs to update its size every time the user changes the radius of their stroke, so, I have a Python command in the callback script entry for stroke_radius.

This is called no problem if stroke_radius is changed directly on the stroke_radius parameter - but, if the user changes radius size by holding shift and dragging left/right in the viewport, the callback script does not fire, despite the stroke_radius value changing in the float field, and in preview size in viewport.

Is this a bug, or expected behavior? Any workarounds you can think of?
Alexey Vanzhula
mtf
Any workarounds you can think of?
Add spare parm (Checkbox, for instance) with a Python expression that reads the radius value and do the callback
mtf
Thanks for the suggestion. I tried both of the following:

Add a spare param, a float called radius_hack.
Set its value to a python expression: hou.parm(“stroke_radius”).evalAsFloat()
Added a callback script to it: print(“was called”)

If I change the “real” radius stroke, either by changing it's float value or altering it in viewport, “was called” is not printed. As expected, it is printed if I move the slider for radius_hack.

I also tried setting the Python expression of radius_hack to:

hou.parm(“stroke_radius”).evalAsFloat()
import time
print(time.time())

Perhaps this is what you meant. This works, however, when I am drawing a stroke it is called over and over. Since my callback is a caching function that runs somewhat slowly, it's untenable to have it called repeatedly during draw, since it slows things down massively.

EDIT:

I ended up getting something pretty acceptable by doing the following:

Make a spare invisible float param called “last_radius”
Set its value to that of “stroke_radius” on poststroke
On prestroke, check if “last_radius” != “stroke_radius”, and if so, blow the cache
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB