22from NodeGraphQt .base .port import Port
33from NodeGraphQt .constants import NODE_PROP
44from NodeGraphQt import QtCore
5- import random
5+ import hashlib
66import copy
77import 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
2028class 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