Improve handling and customize rendering of ferrules
This commit is contained in:
parent
7151346e38
commit
da0d0c84b6
104
src/wireviz.py
104
src/wireviz.py
@ -102,35 +102,58 @@ class Harness:
|
|||||||
self.nodes[x.to_name].ports_left = True
|
self.nodes[x.to_name].ports_left = True
|
||||||
|
|
||||||
for k, n in self.nodes.items():
|
for k, n in self.nodes.items():
|
||||||
# a = attributes
|
if n.category == 'ferrule':
|
||||||
a = [n.type,
|
infostring = '{type} {color}'.format(type=n.type,
|
||||||
n.gender,
|
color=translate_color(n.color, self.color_mode) if n.color else '')
|
||||||
'{}-pin'.format(len(n.pinout)) if n.show_num_pins else '']
|
infostring_l = infostring if n.ports_right else ''
|
||||||
# p = pinout
|
infostring_r = infostring if n.ports_left else ''
|
||||||
p = [[],[],[]]
|
|
||||||
p[1] = list(n.pinout)
|
|
||||||
for i, x in enumerate(n.pinout, 1):
|
|
||||||
if n.ports_left:
|
|
||||||
p[0].append('<p{portno}l>{portno}'.format(portno=i))
|
|
||||||
if n.ports_right:
|
|
||||||
p[2].append('<p{portno}r>{portno}'.format(portno=i))
|
|
||||||
# l = label
|
|
||||||
l = [n.name if n.show_name else '', a, p]
|
|
||||||
dot.node(k, label=nested(l))
|
|
||||||
|
|
||||||
if len(n.loops) > 0:
|
dot.node(k, shape='cds',
|
||||||
dot.attr('edge',color='#000000')
|
style='filled',
|
||||||
if n.ports_left:
|
orientation = '0' if n.ports_left else '180',
|
||||||
loop_side = 'l'
|
label='''<
|
||||||
loop_dir = 'w'
|
|
||||||
elif n.ports_right:
|
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="2"><TR>
|
||||||
loop_side = 'r'
|
<TD PORT="p1l"> {infostring_l} </TD>
|
||||||
loop_dir = 'e'
|
{colorbar}
|
||||||
else:
|
<TD PORT="p1r"> {infostring_r} </TD>
|
||||||
raise Exception('No side for loops')
|
</TR></TABLE>
|
||||||
for loop in n.loops:
|
|
||||||
dot.edge('{name}:p{port_from}{loop_side}:{loop_dir}'.format(name=n.name, port_from=loop[0], port_to=loop[1], loop_side=loop_side, loop_dir=loop_dir),
|
|
||||||
'{name}:p{port_to}{loop_side}:{loop_dir}'.format(name=n.name, port_from=loop[0], port_to=loop[1], loop_side=loop_side, loop_dir=loop_dir))
|
>'''.format(infostring_l=infostring_l,
|
||||||
|
infostring_r=infostring_r,
|
||||||
|
colorbar='<TD BGCOLOR="{}" BORDER="1" SIDES="LR"> </TD>'.format(translate_color(n.color, 'HEX')) if n.color else ''))
|
||||||
|
# dot.node(k, label='{<p1l>A|B|{C|<p1r>D|E}}')
|
||||||
|
else:
|
||||||
|
# a = attributes
|
||||||
|
a = [n.type,
|
||||||
|
n.gender,
|
||||||
|
'{}-pin'.format(len(n.pinout)) if n.show_num_pins else '']
|
||||||
|
# p = pinout
|
||||||
|
p = [[],[],[]]
|
||||||
|
p[1] = list(n.pinout)
|
||||||
|
for i, x in enumerate(n.pinout, 1):
|
||||||
|
if n.ports_left:
|
||||||
|
p[0].append('<p{portno}l>{portno}'.format(portno=i))
|
||||||
|
if n.ports_right:
|
||||||
|
p[2].append('<p{portno}r>{portno}'.format(portno=i))
|
||||||
|
# l = label
|
||||||
|
l = [n.name if n.show_name else '', a, p]
|
||||||
|
dot.node(k, label=nested(l))
|
||||||
|
|
||||||
|
if len(n.loops) > 0:
|
||||||
|
dot.attr('edge',color='#000000')
|
||||||
|
if n.ports_left:
|
||||||
|
loop_side = 'l'
|
||||||
|
loop_dir = 'w'
|
||||||
|
elif n.ports_right:
|
||||||
|
loop_side = 'r'
|
||||||
|
loop_dir = 'e'
|
||||||
|
else:
|
||||||
|
raise Exception('No side for loops')
|
||||||
|
for loop in n.loops:
|
||||||
|
dot.edge('{name}:p{port_from}{loop_side}:{loop_dir}'.format(name=n.name, port_from=loop[0], port_to=loop[1], loop_side=loop_side, loop_dir=loop_dir),
|
||||||
|
'{name}:p{port_to}{loop_side}:{loop_dir}'.format(name=n.name, port_from=loop[0], port_to=loop[1], loop_side=loop_side, loop_dir=loop_dir))
|
||||||
|
|
||||||
for k, c in self.cables.items():
|
for k, c in self.cables.items():
|
||||||
# a = attributes
|
# a = attributes
|
||||||
@ -201,25 +224,29 @@ class Harness:
|
|||||||
existing_connections.append(x.via_port)
|
existing_connections.append(x.via_port)
|
||||||
|
|
||||||
if x.from_port is not None: # connect to left
|
if x.from_port is not None: # connect to left
|
||||||
|
_from_port = ':p{}r'.format(x.from_port) if self.nodes[x.from_name].category != 'ferrule' else ''
|
||||||
|
code_left_1 = '{from_name}{from_port}:e'.format(from_name=x.from_name, from_port=_from_port)
|
||||||
if c.type == 'bundle':
|
if c.type == 'bundle':
|
||||||
dot.edge('{from_name}:p{from_port}r'.format(from_name=x.from_name, from_port=x.from_port),
|
code_left_2 = '{via_name}_w{via_wire}l:w'.format(via_name=c.name, via_wire=x.via_port)
|
||||||
'{via_name}_w{via_wire}l:w'.format(via_name=c.name, via_wire=x.via_port),
|
dot.edge(code_left_1, code_left_2,
|
||||||
headlabel='{}{}:{}'.format(' ' * 12, x.from_name, x.from_port),
|
headlabel='{}{}:{}'.format(' ' * 12, x.from_name, x.from_port),
|
||||||
labelangle='-60',
|
labelangle='-60',
|
||||||
labeldist='0')
|
labeldist='0')
|
||||||
else:
|
else:
|
||||||
dot.edge('{from_name}:p{from_port}r'.format(from_name=x.from_name, from_port=x.from_port),
|
code_left_2 = '{via_name}:w{via_wire}{via_subport}:w'.format(via_name=c.name, via_wire=x.via_port, via_subport='i' if c.show_pinout else '')
|
||||||
'{via_name}:w{via_wire}{via_subport}'.format(via_name=c.name, via_wire=x.via_port, via_subport='i' if c.show_pinout else ''))
|
dot.edge(code_left_1, code_left_2)
|
||||||
if x.to_port is not None: # connect to right
|
if x.to_port is not None: # connect to right
|
||||||
|
_to_port = ':p{}l'.format(x.to_port) if self.nodes[x.to_name].category != 'ferrule' else ''
|
||||||
|
code_right_2 = '{to_name}{to_port}:w'.format(to_name=x.to_name, to_port=_to_port)
|
||||||
if c.type == 'bundle':
|
if c.type == 'bundle':
|
||||||
dot.edge('{via_name}_w{via_wire}r:e'.format(via_name=c.name, via_wire=x.via_port),
|
code_right_1 = '{via_name}_w{via_wire}r:e'.format(via_name=c.name, via_wire=x.via_port)
|
||||||
'{to_name}:p{to_port}l'.format(to_name=x.to_name, to_port=x.to_port),
|
dot.edge(code_right_1, code_right_2,
|
||||||
taillabel='{}:{}{}'.format(x.to_name, x.to_port,' ' * 12),
|
taillabel='{}:{}{}'.format(x.to_name, x.to_port,' ' * 12),
|
||||||
labelangle='60',
|
labelangle='60',
|
||||||
labeldist='0')
|
labeldist='0')
|
||||||
else:
|
else:
|
||||||
dot.edge('{via_name}:w{via_wire}{via_subport}'.format(via_name=c.name, via_wire=x.via_port, via_subport='o' if c.show_pinout else ''),
|
code_right_1 = '{via_name}:w{via_wire}{via_subport}:e'.format(via_name=c.name, via_wire=x.via_port, via_subport='o' if c.show_pinout else '')
|
||||||
'{to_name}:p{to_port}l'.format(to_name=x.to_name, to_port=x.to_port))
|
dot.edge(code_right_1, code_right_2)
|
||||||
|
|
||||||
return dot
|
return dot
|
||||||
|
|
||||||
@ -233,10 +260,12 @@ class Harness:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Node:
|
class Node:
|
||||||
name: str
|
name: str
|
||||||
|
category: str = None
|
||||||
type: str = None
|
type: str = None
|
||||||
gender: str = None
|
gender: str = None
|
||||||
num_pins: int = None
|
num_pins: int = None
|
||||||
pinout: List[Any] = field(default_factory=list)
|
pinout: List[Any] = field(default_factory=list)
|
||||||
|
color: str = None
|
||||||
show_name: bool = True
|
show_name: bool = True
|
||||||
show_num_pins: bool = True
|
show_num_pins: bool = True
|
||||||
|
|
||||||
@ -455,6 +484,7 @@ def parse(file_in, file_out=None):
|
|||||||
h.add_cable(name=k, **o)
|
h.add_cable(name=k, **o)
|
||||||
elif sec == 'ferrules':
|
elif sec == 'ferrules':
|
||||||
pass
|
pass
|
||||||
|
# h.add_node(name=k, category='ferrule', **o)
|
||||||
else:
|
else:
|
||||||
print('{} section empty'.format(sec))
|
print('{} section empty'.format(sec))
|
||||||
else:
|
else:
|
||||||
@ -558,7 +588,7 @@ def parse(file_in, file_out=None):
|
|||||||
for wire_pin in wire_pins:
|
for wire_pin in wire_pins:
|
||||||
ferrule_counter = ferrule_counter + 1
|
ferrule_counter = ferrule_counter + 1
|
||||||
ferrule_id = 'F{}'.format(ferrule_counter)
|
ferrule_id = 'F{}'.format(ferrule_counter)
|
||||||
h.add_node(ferrule_id, **ferrule_params)
|
h.add_node(ferrule_id, category='ferrule', **ferrule_params)
|
||||||
|
|
||||||
if f_w:
|
if f_w:
|
||||||
h.connect(ferrule_id, 1, wire_name, wire_pin, None, None)
|
h.connect(ferrule_id, 1, wire_name, wire_pin, None, None)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user