git.lucas.co / hou-control
git clone https://git.lucas.co/hou-control.git

python3.11libs/hc/hcnode.py (2.5K)

  1 from .hcgeo import HCGeo
  2 import hou
  3 
  4 class HCNode:
  5     def __init__(self, hou_node):
  6         self.hou_node = hou_node
  7 
  8 
  9     """ Selection """
 10 
 11     def allChildren(self):
 12         nodes = []
 13         for hou_node in self.hou_node.children():
 14             nodes.append(__class__(hou_node))
 15         return nodes
 16 
 17     def currentNode(self):
 18         return self.__class__(self.hou_node.currentNode())
 19 
 20     def selectedChildren(self):
 21         nodes = []
 22         for hou_node in self.hou_node.selectedChildren():
 23             nodes.append(self.__class__(hou_node))
 24         return nodes
 25 
 26     def setSelected(self, state):
 27         self.hou_node.setSelected(state)
 28 
 29 
 30     """ Visibility """
 31 
 32     def displayNode(self):
 33         hou_display_node = self.hou_node.displayNode()
 34         if hou_display_node:
 35             return self.__class__(hou_display_node)
 36         else:
 37             return None
 38 
 39     def visibleNodes(self):
 40         stack = self.children()
 41         visible_nodes = []
 42 
 43         while stack:
 44             hc_node = stack.pop()
 45             if hc_node.hou_node.isSubNetwork():
 46                 child_cat = hc_node.childCat()
 47                 if child_cat == 'Object' and hc_node.hou_node.isDisplayFlagSet():
 48                     stack.extend(hc_node.children())
 49                 elif child_cat == 'Sop' and hc_node.hou_node.isDisplayFlagSet():
 50                     display_node = hc_node.displayNode()
 51                     if display_node:
 52                         visible_nodes.append(display_node)
 53 
 54         return visible_nodes
 55 
 56 
 57     """ Geometry """
 58 
 59     def geometry(self):
 60         return self.hou_node.geometry()
 61 
 62     def geo(self):
 63         geo = hou.Geometry()
 64         for node in self.visibleNodes():
 65             geo.merge(node.geometry())
 66         return geo
 67 
 68 
 69     """ Children """
 70 
 71     def childCat(self):
 72         """ Possibilities: Object, Sop, Lop """
 73         return self.hou_node.childTypeCategory().name()
 74 
 75     def children(self):
 76         hou_nodes = self.hou_node.children()
 77         nodes = []
 78         for hou_node in hou_nodes:
 79             nodes.append(self.__class__(hou_node))
 80         return nodes
 81 
 82     def netPos(self):
 83         """ Network editor xy position """
 84         return self.hou_node.position()
 85 
 86 
 87     """ Network """
 88 
 89     def position(self):
 90         return self.hou_node.position()
 91 
 92     def setColor(self, color):
 93         self.hou_node.setColor(color)
 94 
 95     def setPosition(self, pos):
 96         self.hou_node.setPosition(pos)
 97 
 98     def setUserData(self, a, b):
 99         self.hou_node.setUserData(a, b)
100