split edge color in multiple edges

This commit is contained in:
Marc Brückner 2020-07-22 13:25:32 +02:00
parent f2f654854a
commit 28a3e1d460
2 changed files with 41 additions and 10 deletions

View File

@ -246,25 +246,56 @@ class Harness:
# connections
for connection_color in cable.connections:
if isinstance(connection_color.via_port, int): # check if it's an actual wire and not a shield
dot.attr('edge', color=':'.join(['#000000'] + wv_colors.get_color_hex(cable.colors[connection_color.via_port - 1], pad=pad) + ['#000000']))
colors = wv_colors.get_color_hex(cable.colors[connection_color.via_port - 1])
isShield=False
#dot.attr('edge', color=':'.join(['#000000'] + wv_colors.get_color_hex(cable.colors[connection_color.via_port - 1], pad=pad) + ['#000000']))
else: # it's a shield connection
# shield is shown as a thin tinned wire
dot.attr('edge', color=':'.join(['#000000', wv_colors.get_color_hex('SN', pad=False)[0], '#000000']))
if connection_color.from_port is not None: # connect to left
colors = wv_colors.get_color_hex('SN', pad=False)
isShield=True
#dot.attr('edge', color=':'.join(['#000000', wv_colors.get_color_hex('SN', pad=False)[0], '#000000']))
leftConn = connection_color.from_port is not None
rightConn = connection_color.to_port is not None
if leftConn: # connect to left
from_port = f':p{connection_color.from_port}r' if self.connectors[connection_color.from_name].style != 'simple' else ''
code_left_1 = f'{connection_color.from_name}{from_port}:e'
code_left_2 = f'{cable.name}:w{connection_color.via_port}:w'
dot.edge(code_left_1, code_left_2)
from_string = f'{connection_color.from_name}:{connection_color.from_port}' if self.connectors[connection_color.from_name].show_name else ''
html = html.replace(f'<!-- {connection_color.via_port}_in -->', from_string)
if connection_color.to_port is not None: # connect to right
if rightConn: # connect to right
code_right_1 = f'{cable.name}:w{connection_color.via_port}:e'
to_port = f':p{connection_color.to_port}l' if self.connectors[connection_color.to_name].style != 'simple' else ''
code_right_2 = f'{connection_color.to_name}{to_port}:w'
dot.edge(code_right_1, code_right_2)
to_string = f'{connection_color.to_name}:{connection_color.to_port}' if self.connectors[connection_color.to_name].show_name else ''
html = html.replace(f'<!-- {connection_color.via_port}_out -->', to_string)
#black cable borders
if not isShield:
dot.attr('edge', style="solid", penwidth="6.0", color='#000000')
if leftConn:
dot.edge(code_left_1, code_left_2)
if rightConn:
dot.edge(code_right_1, code_right_2)
#invis cable to break graphviz edge ordering
dot.attr('edge', style='invis')
if leftConn:
dot.edge (connection_color.from_name, cable.name)
if rightConn:
dot.edge (cable.name, connection_color.to_name)
#cable color
dot.attr('edge', style="solid", penwidth="2.0", color=colors[0])
if leftConn:
dot.edge(code_left_1, code_left_2)
if rightConn:
dot.edge(code_right_1, code_right_2)
dot.node(cable.name, label=f'<{html}>', shape='box',
style='filled,dashed' if cable.category == 'bundle' else '', margin='0', fillcolor='white')

View File

@ -104,11 +104,11 @@ color_default = '#ffffff'
def get_color_hex(input, pad=False):
if input is None or input == '':
return [color_default]
if len(input) == 4: # give wires with EXACTLY 2 colors that striped/banded look
input = input + input[:2]
#if len(input) == 4: # give wires with EXACTLY 2 colors that striped/banded look
# input = input + input[:2]
# hacky style fix: give single color wires a triple-up so that wires are the same size
if pad and len(input) == 2:
input = input + input + input
#if pad and len(input) == 2:
# input = input + input + input
try:
output = [_color_hex[input[i:i + 2]] for i in range(0, len(input), 2)]
except KeyError: