-
Notifications
You must be signed in to change notification settings - Fork 49
Open
Description
What happened?
The Houdini lsattrs logic does a search for nodes based on a parameter name and value which is used for host.ls() in Houdini.
I just heard of nodesearch that comes with Houdini out of the box. It might be worth actually relying on that logic instead.
It could make lsattrs basically like this:
# pseudocode match any of {attr: value} in attrs
import hou
import nodesearch
def lsattrs(attrs):
root = hou.node("/obj")
for attr, value in attrs.items():
matcher = nodesearch.RawParm(attr, value, exact=True)
for node in matcher.nodes(root, recursive=True)
yield nodeAnd I noticed the current logic in Houdini doesn't actually ensure all input values of the attrs dict get matched but if we do actually want that:
# pseudocode match all of {attr: value} in attrs
import hou
import nodesearch
def lsattrs(attrs):
root = hou.node("/obj")
matchers = []
for attr, value in attrs.items():
matchers.append(nodesearch.RawParm(attr, value, exact=True))
for node in nodesearch.Group(matchers, intersect=True):
yield nodeIt could be worth investigating whether the logic used by nodesearch is faster or not.
Additional Context
This could be a micro-optimization so might only really be worth if host.ls() really becomes problematic. But leaving it here for future reference.
Metadata
Metadata
Assignees
Labels
No labels