Lucavfx 2 Posted January 27, 2017 Hi, I'd like to access the 'Hide When' parameter field in 'Edit Parameter Interface' via python. The idea is to access this field and store a string such as "{ showmoreinfo == 1 }". Is there a way to easily do this? I searched and found workarounds which involve calling the hide method i.e. hou.parm('/out/mantra1/vm_lightexport_scope21').hide(1) but this result in an inefficient system requiring hoops to achieve what I want. Any ideas? Thanks Luca Share this post Link to post Share on other sites
graham 148 Posted January 27, 2017 Disable/Hide When is handled through a parameters ParmTemplate conditionals dict. Consider this example of a button that is disabled/hidden when a toggle ('parm') is not checked: >>> pt=hou.parm('/obj/geo1/null1/parm2').parmTemplate() >>> pt <hou.ButtonParmTemplate name='parm2' label='Label'> >>> pt.conditionals() {parmCondType.DisableWhen: '{ parm == 0 }', parmCondType.HideWhen: '{ parm == 0 }'} >>> pt.setConditional(hou.parmCondType.DisableWhen, "{ parm == 1 }") >>> pt.setConditional(hou.parmCondType.HideWhen, "{ parm == 1 }") >>> pt.conditionals() {parmCondType.DisableWhen: '{ parm == 1 }', parmCondType.HideWhen: '{ parm == 1 }'} >>> n.replaceSpareParmTuple(pt.name(), pt) Share this post Link to post Share on other sites
Lucavfx 2 Posted January 27, 2017 23 minutes ago, graham said: Disable/Hide When is handled through a parameters ParmTemplate conditionals dict. Consider this example of a button that is disabled/hidden when a toggle ('parm') is not checked: >>> pt=hou.parm('/obj/geo1/null1/parm2').parmTemplate() >>> pt <hou.ButtonParmTemplate name='parm2' label='Label'> >>> pt.conditionals() {parmCondType.DisableWhen: '{ parm == 0 }', parmCondType.HideWhen: '{ parm == 0 }'} >>> pt.setConditional(hou.parmCondType.DisableWhen, "{ parm == 1 }") >>> pt.setConditional(hou.parmCondType.HideWhen, "{ parm == 1 }") >>> pt.conditionals() {parmCondType.DisableWhen: '{ parm == 1 }', parmCondType.HideWhen: '{ parm == 1 }'} >>> n.replaceSpareParmTuple(pt.name(), pt) Thanks, I'm getting closer now. The problem is that as in the case of image plane parameters they're specified as vm_channel_plane# however python param and parmTemplate calls expect parameter names to be explicit (i.e. vm_channel_plane23). Setting the conditionals dict to explicit parameters does not seem to apply in this case Share this post Link to post Share on other sites
graham 148 Posted January 27, 2017 In the case of something like that (and if say modifying more than one parameter, or the ones on digital assets) you'll want to use the hou.ParmTemplateGroup from the node like as follows: >>> hou.parm('/out/mantra1/vm_variable_plane1').description() 'VEX Variable' >>> ptg = hou.node('/out/mantra1').parmTemplateGroup() >>> ptg.find("vm_variable_plane#") <hou.StringParmTemplate name='vm_variable_plane#' label='VEX Variable' length=1 naming_sch >>> pt = ptg.find("vm_variable_plane#") >>> pt.setLabel("This is a test") >>> ptg.replace(pt.name(), pt) >>> hou.node('/out/mantra1').setParmTemplateGroup(ptg) >>> hou.parm('/out/mantra1/vm_variable_plane1').description() 'This is a test' 1 Share this post Link to post Share on other sites
Lucavfx 2 Posted February 6, 2017 On 1/27/2017 at 5:51 PM, graham said: In the case of something like that (and if say modifying more than one parameter, or the ones on digital assets) you'll want to use the hou.ParmTemplateGroup from the node like as follows: >>> hou.parm('/out/mantra1/vm_variable_plane1').description() 'VEX Variable' >>> ptg = hou.node('/out/mantra1').parmTemplateGroup() >>> ptg.find("vm_variable_plane#") <hou.StringParmTemplate name='vm_variable_plane#' label='VEX Variable' length=1 naming_sch >>> pt = ptg.find("vm_variable_plane#") >>> pt.setLabel("This is a test") >>> ptg.replace(pt.name(), pt) >>> hou.node('/out/mantra1').setParmTemplateGroup(ptg) >>> hou.parm('/out/mantra1/vm_variable_plane1').description() 'This is a test' Thanks Graham that helped quite a bit Share this post Link to post Share on other sites