Skip to content

Commit 0aed7c6

Browse files
committed
Generate color based on strings, cryptomatte style
1 parent 4f6e392 commit 0aed7c6

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

example_auto_nodes/node_base/auto_node.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,27 @@
22
from NodeGraphQt.base.port import Port
33
from NodeGraphQt.constants import NODE_PROP
44
from NodeGraphQt import QtCore
5-
import random
5+
import hashlib
66
import copy
77
import time
88

9-
def rand_color(seed_type):
10-
seed = id(seed_type)
11-
random.seed(seed + 10)
12-
r = random.randint(50, 200)
13-
random.seed(seed + 5)
14-
g = random.randint(50, 200)
15-
random.seed(seed + 3421)
16-
b = random.randint(50, 200)
17-
return (r, g, b, 255)
9+
10+
# Generate random color based on strings
11+
class CryptoColors(object):
12+
def __init__(self):
13+
self.colors = {}
14+
15+
def get(self, text, Min=50, Max=200):
16+
if text in self.colors:
17+
return self.colors[text]
18+
h = hashlib.sha256(text.encode('utf-8')).hexdigest()
19+
d = int('0xFFFFFFFFFFFFFFFF', 0)
20+
r = int(Min + (int("0x" + h[:16], 0) / d) * (Max - Min))
21+
g = int(Min + (int("0x" + h[16:32], 0) / d) * (Max - Min))
22+
b = int(Min + (int("0x" + h[32:48], 0) / d) * (Max - Min))
23+
a = int(Min + (int("0x" + h[48:], 0) / d) * (Max - Min))
24+
self.colors[text] = (r, g, b, 255)
25+
return self.colors[text]
1826

1927

2028
class AutoNode(BaseNode,QtCore.QObject):
@@ -29,6 +37,7 @@ def __init__(self, defaultInputType=None, defaultOutputType=None):
2937
self.matchTypes = [[float, int]]
3038
self.errorColor = (200, 50, 50)
3139
self.stopCookColor = (200, 200, 200)
40+
self._cryptoColors = CryptoColors()
3241

3342
self.defaultColor = self.get_property("color")
3443
self.defaultValue = None
@@ -186,8 +195,8 @@ def set_port_type(self, port, value_type):
186195
else:
187196
current_port.DataType = value_type
188197

189-
current_port.border_color = rand_color(value_type)
190-
current_port.color = rand_color(value_type)
198+
current_port.border_color = self._cryptoColors.get(str(value_type))
199+
current_port.color = self._cryptoColors.get(str(value_type))
191200
conn_type = 'multi' if current_port.multi_connection() else 'single'
192201
data_type_name = value_type.__name__ if value_type else "all"
193202
current_port.view.setToolTip('{}: {} ({}) '.format(current_port.name(), data_type_name, conn_type))

0 commit comments

Comments
 (0)