Add ability to define loops on connectors

This commit is contained in:
Daniel Rojas 2020-05-22 12:58:09 +02:00
parent 59816cfb6d
commit 075d9ed9db
3 changed files with 29 additions and 3 deletions

View File

@ -5,7 +5,13 @@ digraph G {
X1[label="X1 | {{DCD|RX|TX|DTR|GND|DSR|RTS|CTS|RI} | {<p1>1|<p2>2|<p3>3|<p4>4|<p5>5|<p6>6|<p7>7|<p8>8|<p9>9}}}"] X1[label="X1 | {{DCD|RX|TX|DTR|GND|DSR|RTS|CTS|RI} | {<p1>1|<p2>2|<p3>3|<p4>4|<p5>5|<p6>6|<p7>7|<p8>8|<p9>9}}}"]
X2[label="X2 | {{<p1>1|<p2>2|<p3>3|<p4>4|<p5>5|<p6>6} | {|||||}}}"] X2[label="X2 | {{<p1>1|<p2>2|<p3>3|<p4>4|<p5>5|<p6>6} | {|||||}}}"]
{edge[style=bold]
X2:p5:w -> X2:p6:w
}
W1[label="W1 | {{<w1i>1|<w2i>2|<w3i>3|<w4i>4} | {WH|BN|GN|Shield} | {<w1o>1|<w2o>2|<w3o>3|<w4o>4}}}"] W1[label="W1 | {{<w1i>1|<w2i>2|<w3i>3|<w4i>4} | {WH|BN|GN|Shield} | {<w1o>1|<w2o>2|<w3o>3|<w4o>4}}}"]
{edge[style=bold] {edge[style=bold]

View File

@ -3,13 +3,12 @@ import wireviz
PINOUT_SERIAL = ('DCD','RX','TX','DTR','GND','DSR','RTS','CTS','RI') PINOUT_SERIAL = ('DCD','RX','TX','DTR','GND','DSR','RTS','CTS','RI')
COLORS_WEIRD = ("infrared","ultraviolet","transparent","invisible") COLORS_WEIRD = ("infrared","ultraviolet","transparent","invisible")
# example 1
X1 = wireviz.Node("X1", pinout=PINOUT_SERIAL, ports_right=True) X1 = wireviz.Node("X1", pinout=PINOUT_SERIAL, ports_right=True)
X2 = wireviz.Node("X2", num_pins=6, ports_left=True) X2 = wireviz.Node("X2", num_pins=6, ports_left=True)
W1 = wireviz.Cable("W1", num_wires=3, color_code="DIN", shield=True) W1 = wireviz.Cable("W1", num_wires=3, color_code="DIN", shield=True)
W1.connect(X1,(2,3,5),(1,2,3),X2,(1,3,2)) W1.connect(X1,(2,3,5),(1,2,3),X2,(1,3,2))
X2.loop(5,6)
objects = [X1, X2, W1] objects = [X1, X2, W1]
with open('output/output.dot','w') as f: with open('output/output.dot','w') as f:

View File

@ -22,6 +22,7 @@ class Node:
self.name = name self.name = name
self.ports_left = ports_left self.ports_left = ports_left
self.ports_right = ports_right self.ports_right = ports_right
self.loops = []
if pinout is None: if pinout is None:
self.pinout = ("",) * num_pins self.pinout = ("",) * num_pins
@ -32,6 +33,18 @@ class Node:
else: else:
self.pinout = pinout self.pinout = pinout
def loop(self, from_pin, to_pin, side=None):
if self.ports_left == True and self.ports_right == False:
loop_side = 'w' # west = left
elif self.ports_left == False and self.ports_right == True:
loop_side = 'e' # east = right
elif self.ports_left == True and self.ports_right == True:
if side == None:
raise Exception("Must specify side of loop")
else:
loop_side = side
self.loops.append((from_pin, to_pin, loop_side))
def __repr__(self): def __repr__(self):
return "{} = {} {}".format(self.name, len(self.pinout), self.pinout) return "{} = {} {}".format(self.name, len(self.pinout), self.pinout)
@ -65,6 +78,14 @@ class Node:
s = s + '}}"]' s = s + '}}"]'
# print loops
if len(self.loops) > 0:
s = s + '\n\n{edge[style=bold]\n'
for x in self.loops:
s = s + '{name}:p{port_from}:{loop_side} -> {name}:p{port_to}:{loop_side}\n'.format(name=self.name, port_from=x[0], port_to=x[1], loop_side=x[2])
s = s + '}'
s = s + '\n'
return s return s
class Cable: class Cable: