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