Updating / Recooking the UI while running a python loop

   2212   1   1
User Avatar
Member
6 posts
Joined: Jan. 2019
Offline
Hey Guys,

I'm trying to update attributes with a python sop and seeing downstream results live.

I'm using the executeInMainThreadWithResult() function that comes with hdefereval.py and I am able to print the values live in the python shell / console while maintaining an interactive viewport during runtime, but the attributes don't update until the script finished.

Im running this code (HIP is also attached):

node = hou.pwd()
geo = node.geometry()

import hou
import hdefereval
import threading
import time

points = geo.points()

def houdini_command():
    for i,point in enumerate(points):
        point.setAttribValue("move", float(n))
    print("running")

def updateUI():
    hou.ui.triggerUpdate()
    
def worker():
    global n
    n = 0  
    while n < 5:
        hdefereval.executeInMainThreadWithResult(houdini_command)
        hdefereval.executeInMainThreadWithResult(updateUI)    
        time.sleep(.5)
        print(n)
        n += 1

thread = threading.Thread(target=worker)
thread.daemon = True

thread.start()

Is there a way to hack this together to be able to view the changes of each loop live without having to wait until the full script is processed?



I also tried writing the attributes to a different node & piece of geometry but that didn't work because python sop only gets read access to geometry owned by other respective node.

Any pointers would be much appreciated! Thanks in advance

Best,

j

Attachments:
execInMain.hiplc (253.8 KB)

User Avatar
Member
8 posts
Joined: Aug. 2014
Offline
Hey, I was struggling with somewhat the same thing today. Needed to wait for the pane to maximize before beginning the flipbooking process in python.
If you need to wait until your ui updates you can say
 hou.ui.waitUntil(lambda: sceneviewer.pane().isMaximized()==True)
  • Quick Links