Jump to content
Sign in to follow this  
underscoreus

Get values of parms from within python module

Recommended Posts

Posted (edited)

Hey guys (and gals)!

I'm working on a small project to simulate max style auto backups for Houdini wrapped up in an HDA.

For this HDA I have a few functions in the python module that need to be able to read the values of the parameters of the HDA, like a string field where the user can say where to place the auto backups, determine the auto save intervals etc.

However I am having some issues reading the parm values.
So far I've been trying the normal method of first getting a referance to the node itself and then running:

node = hou.node('.')
node.parm('parmname').eval()

However this is proving to be very unreliable, whenever I save and match definition the hda this approach no longer seems to work and I immediately get errors indicating that the first line trying to get a reference to the node returns none/NoneType.

I have even tried to define it with a full path to the node like such:
 

node = hou.node('/obj/autosaver1')

But it still seems to encounter the same issue.

I have seen some mentions of other methods but I am not really sure I fully get how they work.

Any advice on the best and most reliable approach to getting the values from the different parameters of an HDA from within the python module?

 

Thanks for the read!

Stay safe out there!

Edited by underscoreus

Share this post


Link to post
Share on other sites

I am not 100% sure, but it sounds quite similar to my question.
Check here:

 

  • Like 1

Share this post


Link to post
Share on other sites
10 hours ago, sant0s81 said:

I am not 100% sure, but it sounds quite similar to my question.
Check here:

 

Hey, thanks for the post!
I skimmed that topic before making this post, but had a more thorough read of it now. This kind of has the same issue as with my previous examples, just using a different syntax. I got the same errors when trying this solution unfortunately. For some reason it seems like Houdini is not able to correctly evaluate hou.node calls when made from inside an HDA's python module.
Thanks for the tip though!

Share this post


Link to post
Share on other sites
Posted (edited)

The safest way is to check that the value you fetch is valid before you attempt to evaluate the parameter.

node = hou.node('/obj/autosaver1')
if node != None:
	# Success in obtaining a reference to the node.
	p = node.parm("my_parm")
	if p != None:
		# Success in obtaining a reference to parm.
		my_value = p.eval()
	else:
		print "parm not found"
else:
	print "node not found"

 

Edited by Atom
  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)

it's usually either node = hou.pwd() to get the current node, like your HDA or maybe more reliable may be to pass kwargs dictionary from let's say your callback script and use node = kwargs['node'] to get the hda node, then node.parm("parmname") should be fine

Edited by anim
  • Like 1

Share this post


Link to post
Share on other sites
4 hours ago, anim said:

it's usually either node = hou.pwd() to get the current node, like your HDA or maybe more reliable may be to pass kwargs dictionary from let's say your callback script and use node = kwargs['node'] to get the hda node, then node.parm("parmname") should be fine

Hmm, I've never quiet understood what or how the kwargs work. However I am already calling a python function in my callback script. Is the kwargs a variable that can be added to any function/definition? i.e:"def my_test_def(kwargs):" ?

5 hours ago, Atom said:

The safest way is to check that the value you fetch is valid before you attempt to evaluate the parameter.


node = hou.node('/obj/autosaver1')
if node != None:
	# Success in obtaining a reference to the node.
	p = node.parm("my_parm")
	if p != None:
		# Success in obtaining a reference to parm.
		my_value = p.eval()
	else:
		print "parm not found"
else:
	print "node not found"

 

Oh yeah! I should really be making my tools "safer" in that regard, either using that syntax or the "try: except:" way to prevent straight up errors. For now I've just been deving/been lazy and not made any safety nets for that kind of stuff.



Also, I won't jinx it since it's started to work before and then stopped but I think I found my issue. A very clear user error on the most basic level which has me a little embarrassed. I made the node variable at the top of the script outside any of the definitions I call from the callback script tabs of my parameters... So it was as if the variable was kind of never created to begin with... ... ... so, yeah. Wish I had thought of that sooner.

Thanks both of you for replying and bringing up very good points I should improve on stuff though!

Share this post


Link to post
Share on other sites
31 minutes ago, underscoreus said:

Hmm, I've never quiet understood what or how the kwargs work

when callback script is executed, houdini passed kwargs dictionary with specific keys to it, you can directly use it there or pass further to a function you are calling from hdaModule, and whenever possible I'd prefer that over hou.pwd() and of course over hardcoded hackery

here is an example

callback_parm_kwargs_hda_node.hip

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×