From be801c344d7aeba1b11c7d9c9fbf5a94a640fcd4 Mon Sep 17 00:00:00 2001 From: Tobias Falk Date: Sun, 9 Jun 2024 01:46:20 +0200 Subject: [PATCH] Added type for shorts(loop or internal), see ex16 --- examples/ex16.bom.tsv | 3 + examples/ex16.gv | 236 +++++++++++++++++++++++++++ examples/ex16.html | 321 +++++++++++++++++++++++++++++++++++++ examples/ex16.png | Bin 0 -> 78854 bytes examples/ex16.svg | 255 +++++++++++++++++++++++++++++ examples/ex16.yml | 43 +++++ examples/readme.md | 6 + src/wireviz/DataClasses.py | 1 + src/wireviz/Harness.py | 84 ++++++---- 9 files changed, 922 insertions(+), 27 deletions(-) create mode 100644 examples/ex16.bom.tsv create mode 100644 examples/ex16.gv create mode 100644 examples/ex16.html create mode 100644 examples/ex16.png create mode 100644 examples/ex16.svg create mode 100644 examples/ex16.yml diff --git a/examples/ex16.bom.tsv b/examples/ex16.bom.tsv new file mode 100644 index 0000000..dd1dfe8 --- /dev/null +++ b/examples/ex16.bom.tsv @@ -0,0 +1,3 @@ +Id Description Qty Unit Designators +1 Cable, Serial, 4 x 0.25 mm² shielded 0.2 m W1 +2 Connector, Molex KK 254, female, 7 pins 2 X1, X2 diff --git a/examples/ex16.gv b/examples/ex16.gv new file mode 100644 index 0000000..cfbaae9 --- /dev/null +++ b/examples/ex16.gv @@ -0,0 +1,236 @@ +graph { +// Graph generated by WireViz 0.5-dev +// https://github.com/formatc1702/WireViz + graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] + node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] + edge [fontname=arial style=bold] + edge [color="#000000:#FF66CC:#000000"] + X1:p1r:e -- X1:p5r:e + X1:p5r:e -- X1:p7r:e + edge [color="#FF0000" headclip=false style="solid,bold" tailclip=false] + X1:p2j:c -- X1:p6j:c [straight=straight] + edge [headclip=true style=bold tailclip=true] + X1 [label=< + + + + +
+ + +
X1
+
+ + + + +
Molex KK 254female7-pin
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SH2
GND1
VCC2
RX3
TX4
GND5
VCC6
GND7
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#000000:#000000"] + X2:p1l:w -- X2:p5l:w + X2:p5l:w -- X2:p7l:w + edge [color="#000000:#000000:#000000"] + X2:p2l:w -- X2:p6l:w + edge [headclip=true style=bold tailclip=true] + X2 [label=< + + + + +
+ + +
X2
+
+ + + + +
Molex KK 254female7-pin
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1GND
2VCC
3RX
4TX
5GND
6VCC
7GND
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#895956:#000000"] + X1:p1r:e -- W1:w1:w + W1:w1:e -- X2:p1l:w + edge [color="#000000:#ff0000:#000000"] + X1:p2r:e -- W1:w2:w + W1:w2:e -- X2:p2l:w + edge [color="#000000:#ff8000:#000000"] + X1:p3r:e -- W1:w3:w + W1:w3:e -- X2:p4l:w + edge [color="#000000:#ffff00:#000000"] + X1:p4r:e -- W1:w4:w + W1:w4:e -- X2:p3l:w + edge [color="#000000"] + X1:p1r:e -- W1:ws:w + W1 [label=< + + + + +
+ + +
W1
+
+ + + + + + +
Serial4x0.25 mm² (24 AWG)+ S0.2 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
X1:1:GND + 1:BN + X2:1:GND
+ + + + +
+
X1:2:VCC + 2:RD + X2:2:VCC
+ + + + +
+
X1:3:RX + 3:OG + X2:4:TX
+ + + + +
+
X1:4:TX + 4:YE + X2:3:RX
+ + + + +
+
 
X1:1:GNDShield
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] +} diff --git a/examples/ex16.html b/examples/ex16.html new file mode 100644 index 0000000..53e776b --- /dev/null +++ b/examples/ex16.html @@ -0,0 +1,321 @@ + + + + + ex16 + + +

ex16

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +X1 + + +X1 + +Molex KK 254 + +female + +7-pin + + +SH2 + + +GND + + +1 + +VCC + + + +2 + +RX + + +3 + +TX + + +4 + +GND + + +5 + +VCC + + + +6 + +GND + + +7 + + + +X1:e--X1:e + + + + + + +X1:e--X1:e + + + + + + +X1:c--X1:c + + + + +W1 + + +W1 + +Serial + +4x + +0.25 mm² (24 AWG) + ++ S + +0.2 m +  +X1:1:GND +     1:BN     +X2:1:GND + + + +X1:2:VCC +     2:RD     +X2:2:VCC + + + +X1:3:RX +     3:OG     +X2:4:TX + + + +X1:4:TX +     4:YE     +X2:3:RX + + + +  +X1:1:GND +Shield + +  + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + +X2 + + +X2 + +Molex KK 254 + +female + +7-pin + +1 + +GND + +2 + +VCC + +3 + +RX + +4 + +TX + +5 + +GND + +6 + +VCC + +7 + +GND + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +X2:w--X2:w + + + + + + +X2:w--X2:w + + + + + + +X2:w--X2:w + + + + + + + +
+ +
+ +
+ +

Bill of Materials

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, Serial, 4 x 0.25 mm² shielded0.2mW1
2Connector, Molex KK 254, female, 7 pins2X1, X2
+ +
+ + diff --git a/examples/ex16.png b/examples/ex16.png new file mode 100644 index 0000000000000000000000000000000000000000..54f04416c2565fffd27b86cc7c0619d329028434 GIT binary patch literal 78854 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 bXIHn22WOm|@Gzs`pJRtk9ZXj<^85b)S`_!f literal 0 HcmV?d00001 diff --git a/examples/ex16.svg b/examples/ex16.svg new file mode 100644 index 0000000..17dbd81 --- /dev/null +++ b/examples/ex16.svg @@ -0,0 +1,255 @@ + + + + + + + + + +X1 + + +X1 + +Molex KK 254 + +female + +7-pin + + +SH2 + + +GND + + +1 + +VCC + + + +2 + +RX + + +3 + +TX + + +4 + +GND + + +5 + +VCC + + + +6 + +GND + + +7 + + + +X1:e--X1:e + + + + + + +X1:e--X1:e + + + + + + +X1:c--X1:c + + + + +W1 + + +W1 + +Serial + +4x + +0.25 mm² (24 AWG) + ++ S + +0.2 m +  +X1:1:GND +     1:BN     +X2:1:GND + + + +X1:2:VCC +     2:RD     +X2:2:VCC + + + +X1:3:RX +     3:OG     +X2:4:TX + + + +X1:4:TX +     4:YE     +X2:3:RX + + + +  +X1:1:GND +Shield + +  + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + +X2 + + +X2 + +Molex KK 254 + +female + +7-pin + +1 + +GND + +2 + +VCC + +3 + +RX + +4 + +TX + +5 + +GND + +6 + +VCC + +7 + +GND + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +W1:e--X2:w + + + + + + +X2:w--X2:w + + + + + + +X2:w--X2:w + + + + + + +X2:w--X2:w + + + + + + diff --git a/examples/ex16.yml b/examples/ex16.yml new file mode 100644 index 0000000..c831cb2 --- /dev/null +++ b/examples/ex16.yml @@ -0,0 +1,43 @@ +connectors: + X1: + type: Molex KK 254 # more information + subtype: female + pinlabels: [GND, VCC, RX, TX, GND, VCC, GND] # pincount is implicit in pinout + shorts: + SH1: + pins: [1, 5, 7] + color: PK + type: loop + SH2: + pins: [2, 6] + color: RD + X2: + type: Molex KK 254 + subtype: female + pinlabels: [GND, VCC, RX, TX, GND, VCC, GND] + shorts: + SH1: + pins: [1, 5, 7] + type: loop + SH2: + pins: [2, 6] + type: loop + +cables: + W1: + color_code: IEC # auto-color wires based on a standard + wirecount: 4 # need to specify number of wires explicitly when using a color code + gauge: 0.25 mm2 # also accepts AWG as unit + show_equiv: true # auto-calculate AWG equivalent from metric gauge + length: 0.2 # length in m + shield: true + type: Serial + +connections: + - + - X1: [1-4] + - W1: [1-4] + - X2: [1,2,4,3] # crossover + - # connection from connector pin to wire shielding + - X1: 1 + - W1: s diff --git a/examples/readme.md b/examples/readme.md index e785dd3..b4934bc 100644 --- a/examples/readme.md +++ b/examples/readme.md @@ -90,3 +90,9 @@ [Source](ex15.yml) - [Bill of Materials](ex15.bom.tsv) +## Example 16 +![](ex16.png) + +[Source](ex16.yml) - [Bill of Materials](ex16.bom.tsv) + + diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 0b54d1e..f62bfa2 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -146,6 +146,7 @@ class Short: description: Optional[str] = None length: Optional[float] = None length_unit: Optional[str] = None + type: Optional[MultilineHypertext] = None @dataclass diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index eb79165..48dd42e 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -186,9 +186,6 @@ class Harness: fontname=self.options.fontname, ) dot.attr("edge", style="bold", fontname=self.options.fontname) - - # print(self.connectors) - # print(self.connectors.values()) for connector in self.connectors.values(): @@ -223,8 +220,14 @@ class Harness: pinhtml.append( '' ) + + intShorts = False + + for shortName in connector.shorts: + if connector.shorts[shortName].get("type") == None or connector.shorts[shortName].get("type") == "internal": + intShorts = True - if len(connector.shorts) > 0: + if len(connector.shorts) > 0 and intShorts: pinhtml.append(" ") if connector.ports_left: pinhtml.append(f' ') @@ -232,7 +235,8 @@ class Harness: pinhtml.append(f" ") for shortName in connector.shorts: - pinhtml.append(f' ') + if connector.shorts[shortName].get("type") == None or connector.shorts[shortName].get("type") == "internal": + pinhtml.append(f' ') if connector.ports_right: pinhtml.append(f' ') @@ -270,19 +274,24 @@ class Harness: for shortName in connector.shorts: short = connector.shorts[shortName] - shPins = short.get('pins'); - shColor = short.get('color'); + shPins = short.get('pins') + shColor = short.get('color') + shType = short.get('type') # shManufacturer = short.get('manufacturer'); # shMpn = short.get('mpn'); # shDescription = short.get('description'); - if shColor == None: - shColor = "BK" - - if pinindex+1 in shPins: - pinhtml.append(f' ') - else: - pinhtml.append(f' ') + if shType == None or shType == "internal": + if shColor == None: + shColor = "BK" + + if pinindex+1 in shPins: + pinhtml.append(f' ') + else: + pinhtml.append(f' ') + elif shType == "loop": + pass + if connector.ports_right: pinhtml.append(f' ') @@ -320,12 +329,13 @@ class Harness: for shortName in connector.shorts: short = connector.shorts[shortName] - shPins = short.get('pins'); - shColor = short.get('color'); - shManufacturer = short.get('manufacturer') if short.get('manufacturer') != None else ""; - shMpn = short.get('mpn') if short.get('mpn') != None else ""; - shDescription = short.get('description') if short.get('description') != None else ""; - length = short.get('length') if short.get('length') != None else ""; + shPins = short.get('pins') + shColor = short.get('color') + shType = short.get('type') + shManufacturer = short.get('manufacturer') if short.get('manufacturer') != None else "" + shMpn = short.get('mpn') if short.get('mpn') != None else "" + shDescription = short.get('description') if short.get('description') != None else "" + length = short.get('length') if short.get('length') != None else "" if short.get('length_unit') != None and short.get('length') != None: length_unit = short.get('length_unit') elif short.get('length') == None: @@ -357,19 +367,39 @@ class Harness: short = connector.shorts[shortName] shPins = short.get('pins'); shColor = short.get('color'); + shType = short.get('type') # shManufacturer = short.get('manufacturer'); # shMpn = short.get('mpn'); # shDescription = short.get('description'); if shColor == None: shColor = "BK" - dot.attr("edge", color=str(wv_colors.translate_color(shColor, "HEX")), headclip="false", tailclip="false", style="solid,bold") - for i in range(1, len(shPins)): - dot.edge( - f"{connector.name}:p{shPins[i - 1]}j:c", - f"{connector.name}:p{shPins[i]}j:c", - straight="straight" - ) + + + if shType == None or shType == "internal": + dot.attr("edge", color=str(wv_colors.translate_color(shColor, "HEX")), headclip="false", tailclip="false", style="solid,bold") + for i in range(1, len(shPins)): + dot.edge( + f"{connector.name}:p{shPins[i - 1]}j:c", + f"{connector.name}:p{shPins[i]}j:c", + straight="straight" + ) + elif shType == "loop": + dot.attr("edge", color=f'#000000:{wv_colors.translate_color(shColor, "HEX")}:#000000') + if connector.ports_left: + loop_side = "l" + loop_dir = "w" + elif connector.ports_right: + loop_side = "r" + loop_dir = "e" + else: + raise Exception("No side for loops") + + for i in range(1, len(shPins)): + dot.edge( + f"{connector.name}:p{shPins[i - 1]}{loop_side}:{loop_dir}", + f"{connector.name}:p{shPins[i]}{loop_side}:{loop_dir}", + ) dot.attr("edge", headclip="true", tailclip="true", style="bold")
{shortName}{shortName}{pinname}