From 465aefaf774bf54bf35f4271098d53a416910146 Mon Sep 17 00:00:00 2001 From: Tobias Falk Date: Thu, 30 May 2024 16:26:19 +0200 Subject: [PATCH] Added Dark Circles --- examples/ex15.bom.tsv | 3 + examples/ex15.gv | 240 +++++++++++++++++++++++++++++ examples/ex15.html | 306 +++++++++++++++++++++++++++++++++++++ examples/ex15.png | Bin 0 -> 48086 bytes examples/ex15.svg | 240 +++++++++++++++++++++++++++++ examples/ex15.yml | 31 ++++ examples/readme.md | 6 + src/wireviz/DataClasses.py | 2 + src/wireviz/Harness.py | 17 +++ 9 files changed, 845 insertions(+) create mode 100644 examples/ex15.bom.tsv create mode 100644 examples/ex15.gv create mode 100644 examples/ex15.html create mode 100644 examples/ex15.png create mode 100644 examples/ex15.svg create mode 100644 examples/ex15.yml diff --git a/examples/ex15.bom.tsv b/examples/ex15.bom.tsv new file mode 100644 index 0000000..dd1dfe8 --- /dev/null +++ b/examples/ex15.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/ex15.gv b/examples/ex15.gv new file mode 100644 index 0000000..ed3a7b9 --- /dev/null +++ b/examples/ex15.gv @@ -0,0 +1,240 @@ +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] + X1 [label=< + + + + +
+ + +
X1
+
+ + + + +
Molex KK 254female7-pin
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GND1
VCC2
RX3
TX4
GND5
VCC6
GND7
+
+> fillcolor="#FFFFFF" shape=box style=filled] + 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/ex15.html b/examples/ex15.html new file mode 100644 index 0000000..a9f7e2d --- /dev/null +++ b/examples/ex15.html @@ -0,0 +1,306 @@ + + + + + ex15 + + +

ex15

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +X1 + + +X1 + +Molex KK 254 + +female + +7-pin + +GND + + + + +1 + +VCC + + + + +2 + +RX + + + +3 + +TX + + + +4 + +GND + + + + +5 + +VCC + + + + +6 + +GND + + + + +7 + + + +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 + + + + + + + +
+ +
+ +
+ +

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/ex15.png b/examples/ex15.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7aa047811759d0f08849451b1d75907bc8b57e GIT binary patch literal 48086 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 TLrxNsRp%Rci|atW>Q{N))AO;yhubE$Tcm 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 + + + + + + + + +X1 + + +X1 + +Molex KK 254 + +female + +7-pin + +GND + + + + +1 + +VCC + + + + +2 + +RX + + + +3 + +TX + + + +4 + +GND + + + + +5 + +VCC + + + + +6 + +GND + + + + +7 + + + +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 + + + + + + diff --git a/examples/ex15.yml b/examples/ex15.yml new file mode 100644 index 0000000..a5e346c --- /dev/null +++ b/examples/ex15.yml @@ -0,0 +1,31 @@ +connectors: + X1: + type: Molex KK 254 # more information + subtype: female + pinlabels: [GND, VCC, RX, TX, GND, VCC, GND] # pincount is implicit in pinout + internal_shorts: [[1, 5, 7], [2, 6]] + internal_shorts_color: [PK, RD] + X2: + type: Molex KK 254 + subtype: female + pinlabels: [GND, VCC, RX, TX, GND, VCC, GND] + internal_shorts: [[1, 5, 7], [2, 6]] + +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 88a4389..e785dd3 100644 --- a/examples/readme.md +++ b/examples/readme.md @@ -84,3 +84,9 @@ [Source](ex14.yml) - [Bill of Materials](ex14.bom.tsv) +## Example 15 +![](ex15.png) + +[Source](ex15.yml) - [Bill of Materials](ex15.bom.tsv) + + diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 5b4bb06..8a14445 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -164,6 +164,8 @@ class Connector: loops: List[List[Pin]] = field(default_factory=list) ignore_in_bom: bool = False additional_components: List[AdditionalComponent] = field(default_factory=list) + internal_shorts: Optional[List[List[Pin]]] = field(default_factory=list) + internal_shorts_color: Optional[List[Color]] = field(default_factory=list) def __post_init__(self) -> None: diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 30468a6..4a76567 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -246,9 +246,19 @@ class Harness: # fmt: on else: pinhtml.append(' ') + + for short, short_color in zip_longest(connector.internal_shorts, connector.internal_shorts_color): + if short_color == None: + short_color = "BK" + + if pinindex+1 in short: + pinhtml.append(f' ') + else: + pinhtml.append(f' ') if connector.ports_right: pinhtml.append(f' {pinname}') + pinhtml.append(" ") pinhtml.append(" ") @@ -257,6 +267,13 @@ class Harness: row.replace("", "\n".join(pinhtml)) for row in html ] + + for short, short_color in zip_longest(connector.internal_shorts, connector.internal_shorts_color): + print("Short_connections: " + str(short) + str(short_color)) + if short_color == None: + short_color = "BK" + # TODO adding dashed Line for Jumpers + html = "\n".join(html) dot.node(