Compare commits
112 Commits
master
...
refactor/b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7aa2a693e1 | ||
|
|
1da0b0fc56 | ||
|
|
cc18c62f3e | ||
|
|
9e72905895 | ||
|
|
4adad9d33a | ||
|
|
78f2c4a7af | ||
|
|
3539b2f8fb | ||
|
|
49556bd81e | ||
|
|
98e8f7f7ca | ||
|
|
8cd76eb605 | ||
|
|
4238a8aef5 | ||
|
|
ca7b134e1e | ||
|
|
f122278b07 | ||
|
|
8e2debb1fa | ||
|
|
af338f620c | ||
|
|
0b173700fa | ||
|
|
5183fdaee4 | ||
|
|
e2e04f725e | ||
|
|
1e4e63ec27 | ||
|
|
00d5271f0c | ||
|
|
8c1d2773a3 | ||
|
|
477a3f7706 | ||
|
|
310e5968ef | ||
|
|
271fb13a07 | ||
|
|
162fe443d1 | ||
|
|
c3b07cf3dd | ||
|
|
fc06491b8c | ||
|
|
c7dcac4893 | ||
|
|
1f8d8b3f8d | ||
|
|
238bc2585e | ||
|
|
35f751e05f | ||
|
|
8c9a8c1cb3 | ||
|
|
7d49f50984 | ||
|
|
af230a4a5c | ||
|
|
3b048ba77f | ||
|
|
91b02fcf10 | ||
|
|
4b6f791bdc | ||
|
|
d8a6da373f | ||
|
|
b03dfc7030 | ||
|
|
c21f81a2cc | ||
|
|
634cdd5265 | ||
|
|
1b6030c1a3 | ||
|
|
2fc132bdb9 | ||
|
|
2ede4f5a08 | ||
|
|
6d33edd395 | ||
|
|
44d5966bf8 | ||
|
|
6f79064802 | ||
|
|
b4cd8a77f0 | ||
|
|
728741e9ff | ||
|
|
4a9a4c8d46 | ||
|
|
c7537f000a | ||
|
|
b15658b926 | ||
|
|
df1e972b17 | ||
|
|
63046346f4 | ||
|
|
1d99889175 | ||
|
|
d549c1e460 | ||
|
|
c33c64971e | ||
|
|
b787c41225 | ||
|
|
b2e5c467c3 | ||
|
|
7902ba6aa6 | ||
|
|
8b9d997054 | ||
|
|
4db8c165ca | ||
|
|
df06e00ae3 | ||
|
|
6ba3f66fb3 | ||
|
|
fb91be402a | ||
|
|
7111a3375f | ||
|
|
f2bc5d79f2 | ||
|
|
5c4c6d831e | ||
|
|
fe016d63ce | ||
|
|
5c18001188 | ||
|
|
b60db7902b | ||
|
|
a4f6c6ad7a | ||
|
|
8ae4dc37a2 | ||
|
|
36ffa969f4 | ||
|
|
ef2b406c78 | ||
|
|
842e174bb9 | ||
|
|
96a3a87f9e | ||
|
|
cc0bd76e99 | ||
|
|
95cc1be647 | ||
|
|
22cd25871c | ||
|
|
e95f4bd53b | ||
|
|
1b31a6f044 | ||
|
|
03518abdcd | ||
|
|
8200e891d0 | ||
|
|
94f9d96197 | ||
|
|
ebd271d54c | ||
|
|
21bfebb9b4 | ||
|
|
9b40858d56 | ||
|
|
fc820079fc | ||
|
|
9e6d327c15 | ||
|
|
d9513865e2 | ||
|
|
8aaee0c85a | ||
|
|
266eb659bb | ||
|
|
84dd10a2dc | ||
|
|
31c5e1aad9 | ||
|
|
587b359fa0 | ||
|
|
2f03dcd1a3 | ||
|
|
064c7fd7c8 | ||
|
|
0078a18953 | ||
|
|
d65222953e | ||
|
|
f46bce6867 | ||
|
|
1f8dd49eb9 | ||
|
|
d348ebe4ce | ||
|
|
7134b6841f | ||
|
|
98e594cf96 | ||
|
|
60b2f6caa9 | ||
|
|
046a1c2ea6 | ||
|
|
f7359ff9b1 | ||
|
|
82b5cb710f | ||
|
|
1435d9c607 | ||
|
|
e034fb3519 | ||
|
|
18782444b1 |
4
.gitattributes
vendored
@ -2,8 +2,8 @@ docs/* linguist-documentation
|
|||||||
examples/* linguist-documentation
|
examples/* linguist-documentation
|
||||||
tutorial/* linguist-documentation
|
tutorial/* linguist-documentation
|
||||||
|
|
||||||
**/*.bom.tsv linguist-generated
|
**/*.tsv linguist-generated
|
||||||
**/*.bom.csv linguist-generated
|
**/*.csv linguist-generated
|
||||||
**/*.gv linguist-generated
|
**/*.gv linguist-generated
|
||||||
**/*.html linguist-generated
|
**/*.html linguist-generated
|
||||||
**/*.png linguist-generated
|
**/*.png linguist-generated
|
||||||
|
|||||||
4
.github/workflows/main.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
max-parallel: 4
|
max-parallel: 4
|
||||||
matrix:
|
matrix:
|
||||||
python-version: [3.7, 3.8]
|
python-version: ["3.8", "3.10"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
@ -22,7 +22,7 @@ jobs:
|
|||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install .
|
pip install .
|
||||||
- name: Create Examples
|
- name: Create Examples
|
||||||
run: PYTHONPATH=$(pwd)/src:$PYTHONPATH cd src/wireviz/ && python build_examples.py
|
run: PYTHONPATH=$(pwd)/src:$PYTHONPATH python src/wireviz/tools/build_examples.py
|
||||||
- name: Upload examples, demos, and tutorials
|
- name: Upload examples, demos, and tutorials
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
28
.gitignore
vendored
@ -1,15 +1,21 @@
|
|||||||
|
# OS-specific files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
desktop.ini
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Development aids
|
||||||
.idea/
|
.idea/
|
||||||
.eggs
|
.vscode/
|
||||||
__pycache__
|
temp/
|
||||||
.*.swp
|
|
||||||
*.egg-info
|
|
||||||
*.pyc
|
|
||||||
build
|
|
||||||
data
|
|
||||||
dist
|
|
||||||
venv/
|
venv/
|
||||||
.venv/
|
.venv/
|
||||||
desktop.ini
|
|
||||||
thumbs.db
|
# Build/compile/release artifacts
|
||||||
temp/
|
build/
|
||||||
|
dist/
|
||||||
|
*.egg-info
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Other temporary files
|
||||||
|
__pycache__
|
||||||
|
.*.swp
|
||||||
|
|||||||
5
cleanup.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
autoflake -i --remove-all-unused-imports src/wireviz/*.py
|
||||||
|
isort src/wireviz/*py
|
||||||
|
black src/wireviz/*.py
|
||||||
12
devtools.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# The following tools have proven useful during development
|
||||||
|
# Feel free to install while inside the WireViz virtualenv, using:
|
||||||
|
# pip install -r devtools.txt
|
||||||
|
|
||||||
|
# Code formatting
|
||||||
|
black # black src/wireviz/*.py
|
||||||
|
isort # isort src/wireviz/*py
|
||||||
|
|
||||||
|
# Development aids
|
||||||
|
pudb # import pudb; pudb.set_trace()
|
||||||
|
autoflake # autoflake -i --remove-all-unused-imports src/wireviz/*.py
|
||||||
|
pyan # pyan3 src/wireviz/*.py -uncge --html > temp/pyan.html
|
||||||
@ -1,18 +1,51 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## [0.4](https://github.com/formatc1702/WireViz/tree/v0.4) (20XX-XX-XX)
|
## [0.5](https://github.com/wireviz/WireViz/tree/v0.5) (20XX-XX-XX)
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/wireviz/WireViz/tree/v0.4.1) (2024-07-13)
|
||||||
|
|
||||||
|
### Improvements to help reported issues
|
||||||
|
|
||||||
|
- Print Python & OS versions when raising unexpected OSError related to #346 & #392 (bugfixes below)
|
||||||
|
- Explain unexpeced top-level type ([#342](https://github.com/wireviz/WireViz/issues/342), [#383](https://github.com/wireviz/WireViz/pull/383))
|
||||||
|
- Add non-empty label to reduce over-sized loops ([#286](https://github.com/wireviz/WireViz/issues/286), [#381](https://github.com/wireviz/WireViz/pull/381))
|
||||||
|
- Improve placeholder name consistency ([#377](https://github.com/wireviz/WireViz/issues/377), [#380](https://github.com/wireviz/WireViz/pull/380))
|
||||||
|
- Add work-around for Graphviz SVG bug ([#175](https://github.com/wireviz/WireViz/issues/175), [#371](https://github.com/wireviz/WireViz/pull/371))
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
|
||||||
|
- Avoid ResourceWarning: unclosed file ([#309 (comment)](https://github.com/wireviz/WireViz/pull/309#issuecomment-2170988381), [#395](https://github.com/wireviz/WireViz/pull/395))
|
||||||
|
- Catch ValueError and OSError(errno=None) ([#318 (review)](https://github.com/wireviz/WireViz/pull/318#pullrequestreview-1457016602), [#391](https://github.com/wireviz/WireViz/issues/391), [#392](https://github.com/wireviz/WireViz/pull/392))
|
||||||
|
- Add minor missing doc entry ([#186 (comment)](https://github.com/wireviz/WireViz/pull/186#issuecomment-2139037434), [#186 (comment)](https://github.com/wireviz/WireViz/pull/186#issuecomment-2155032522))
|
||||||
|
- Avoid Graphviz error when hiding all pins ([#257](https://github.com/wireviz/WireViz/issues/257), [#375](https://github.com/wireviz/WireViz/pull/375))
|
||||||
|
- Avoid decimal point and trailing zero for integer BOM quantities ([#340](https://github.com/wireviz/WireViz/issues/340), [#374](https://github.com/wireviz/WireViz/pull/374))
|
||||||
|
- Update project URL references ([#316 (comment)](https://github.com/wireviz/WireViz/issues/316#issuecomment-1568748914), [#364](https://github.com/wireviz/WireViz/pull/364))
|
||||||
|
- Add missing import of embed_svg_images ([#363](https://github.com/wireviz/WireViz/pull/363))
|
||||||
|
- Use correct default title ([#360](https://github.com/wireviz/WireViz/issues/360), [#361](https://github.com/wireviz/WireViz/pull/361))
|
||||||
|
- Fix bugs in mate processing ([#355](https://github.com/wireviz/WireViz/issues/355), [#358](https://github.com/wireviz/WireViz/pull/358))
|
||||||
|
- Include missing files in published package ([#345](https://github.com/wireviz/WireViz/issues/345), [#347](https://github.com/wireviz/WireViz/pull/347))
|
||||||
|
- Catch OSError(errno=EINVAL) ([#344](https://github.com/wireviz/WireViz/issues/344), [#346](https://github.com/wireviz/WireViz/pull/346))
|
||||||
|
|
||||||
|
|
||||||
|
## [0.4](https://github.com/wireviz/WireViz/tree/v0.4) (2024-05-12)
|
||||||
|
|
||||||
### Backward-incompatible changes
|
### Backward-incompatible changes
|
||||||
- New syntax for autogenerated components ([#184](https://github.com/wireviz/WireViz/issues/184), [#186](https://github.com/wireviz/WireViz/pull/186))
|
- New syntax for autogenerated components ([#184](https://github.com/wireviz/WireViz/issues/184), [#186](https://github.com/wireviz/WireViz/pull/186))
|
||||||
- New command line interface ([#244](https://github.com/wireviz/WireViz/pull/244))
|
- Components that are not referenced in any connection set will not be rendered. Instead, a warning will be output in the console. ([#328](https://github.com/wireviz/WireViz/issues/328), [#332](https://github.com/wireviz/WireViz/pull/332))
|
||||||
|
- New command line interface ([#244](https://github.com/wireviz/WireViz/pull/244)). Run `wireviz --help` for details
|
||||||
|
- The path specified with the `-o`/`--output-dir` option no longer includes the filename (without extension) of the generated files. Use the `-O`/`--output-name` option to specify a different filename for the generated files.
|
||||||
|
- The `.gv` file is no longer included as a default output format (only as an intermediate file during processing) unless specified with the new `-f` option described below.
|
||||||
|
|
||||||
### New features
|
### New features
|
||||||
|
|
||||||
- Allow mates between connectors ([#134](https://github.com/wireviz/WireViz/issues/134), [#186](https://github.com/wireviz/WireViz/pull/186))
|
- Allow mates between connectors ([#134](https://github.com/wireviz/WireViz/issues/134), [#186](https://github.com/wireviz/WireViz/pull/186))
|
||||||
- Improve technical drawing output ([#74](https://github.com/wireviz/WireViz/pull/74), [#32](https://github.com/wireviz/WireViz/issues/32), [#239](https://github.com/wireviz/WireViz/pull/239))
|
- Improve technical drawing output ([#74](https://github.com/wireviz/WireViz/pull/74), [#32](https://github.com/wireviz/WireViz/issues/32), [#239](https://github.com/wireviz/WireViz/pull/239))
|
||||||
- Embed images in SVG output ([#189](https://github.com/wireviz/WireViz/pull/189))
|
- Embed images in SVG output ([#189](https://github.com/wireviz/WireViz/pull/189))
|
||||||
|
- Add ability to choose output formats using the `-f`/`--format` command line option ([#60](https://github.com/wireviz/WireViz/issues/60))
|
||||||
|
- Add option to multiply additional component quantity by number of unpopulated positions on connector ([#298](https://github.com/wireviz/WireViz/pull/298))
|
||||||
|
|
||||||
### Misc. fixes
|
### Misc. fixes
|
||||||
- Use `isort` and `black` for cleaner code and easier merging ([#248](https://github.com/wireviz/WireViz/pull/248))
|
- Use `isort` and `black` for cleaner code and easier merging ([#248](https://github.com/wireviz/WireViz/pull/248))
|
||||||
@ -21,93 +54,89 @@
|
|||||||
- Minor adjustments ([#256](https://github.com/wireviz/WireViz/pull/256))
|
- Minor adjustments ([#256](https://github.com/wireviz/WireViz/pull/256))
|
||||||
|
|
||||||
|
|
||||||
## [0.3.2](https://github.com/formatc1702/WireViz/tree/v0.3.2) (2021-11-27)
|
## [0.3.2](https://github.com/wireviz/WireViz/tree/v0.3.2) (2021-11-27)
|
||||||
|
|
||||||
### Hotfix
|
### Hotfix
|
||||||
|
|
||||||
- Adjust GraphViz generation code for compatibility with v0.18 of the `graphviz` Python package ([#258](https://github.com/formatc1702/WireViz/issues/258), [#261](https://github.com/formatc1702/WireViz/pull/261))
|
- Adjust GraphViz generation code for compatibility with v0.18 of the `graphviz` Python package ([#258](https://github.com/wireviz/WireViz/issues/258), [#261](https://github.com/wireviz/WireViz/pull/261))
|
||||||
|
|
||||||
|
|
||||||
## [0.3.1](https://github.com/formatc1702/WireViz/tree/v0.3.1) (2021-10-25)
|
## [0.3.1](https://github.com/wireviz/WireViz/tree/v0.3.1) (2021-10-25)
|
||||||
|
|
||||||
### Hotfix
|
### Hotfix
|
||||||
|
|
||||||
- Assign generic harness title when using WireViz as a module and not specifying an output file name ([#253](https://github.com/formatc1702/WireViz/issues/253), [#254](https://github.com/formatc1702/WireViz/pull/254))
|
- Assign generic harness title when using WireViz as a module and not specifying an output file name ([#253](https://github.com/wireviz/WireViz/issues/253), [#254](https://github.com/wireviz/WireViz/pull/254))
|
||||||
|
|
||||||
|
|
||||||
## [0.3](https://github.com/formatc1702/WireViz/tree/v0.3) (2021-10-11)
|
## [0.3](https://github.com/wireviz/WireViz/tree/v0.3) (2021-10-11)
|
||||||
|
|
||||||
### New features
|
### New features
|
||||||
|
|
||||||
- Allow referencing a cable's/bundle's wires by color or by label ([#70](https://github.com/formatc1702/WireViz/issues/70), [#169](https://github.com/formatc1702/WireViz/issues/169), [#193](https://github.com/formatc1702/WireViz/issues/193), [#194](https://github.com/formatc1702/WireViz/pull/194))
|
- Allow referencing a cable's/bundle's wires by color or by label ([#70](https://github.com/wireviz/WireViz/issues/70), [#169](https://github.com/wireviz/WireViz/issues/169), [#193](https://github.com/wireviz/WireViz/issues/193), [#194](https://github.com/wireviz/WireViz/pull/194))
|
||||||
- Allow additional BOM items within components ([#50](https://github.com/formatc1702/WireViz/issues/50), [#115](https://github.com/formatc1702/WireViz/pull/115))
|
- Allow additional BOM items within components ([#50](https://github.com/wireviz/WireViz/issues/50), [#115](https://github.com/wireviz/WireViz/pull/115))
|
||||||
- Add support for length units in cables and wires ([#7](https://github.com/formatc1702/WireViz/issues/7), [#196](https://github.com/formatc1702/WireViz/pull/196) (with work from [#161](https://github.com/formatc1702/WireViz/pull/161), [#162](https://github.com/formatc1702/WireViz/pull/162), [#171](https://github.com/formatc1702/WireViz/pull/171)), [#198](https://github.com/formatc1702/WireViz/pull/198), [#205](https://github.com/formatc1702/WireViz/issues/205). [#206](https://github.com/formatc1702/WireViz/pull/206))
|
- Add support for length units in cables and wires ([#7](https://github.com/wireviz/WireViz/issues/7), [#196](https://github.com/wireviz/WireViz/pull/196) (with work from [#161](https://github.com/wireviz/WireViz/pull/161), [#162](https://github.com/wireviz/WireViz/pull/162), [#171](https://github.com/wireviz/WireViz/pull/171)), [#198](https://github.com/wireviz/WireViz/pull/198), [#205](https://github.com/wireviz/WireViz/issues/205). [#206](https://github.com/wireviz/WireViz/pull/206))
|
||||||
- Add option to define connector pin colors ([#53](https://github.com/formatc1702/WireViz/issues/53), [#141](https://github.com/formatc1702/WireViz/pull/141))
|
- Add option to define connector pin colors ([#53](https://github.com/wireviz/WireViz/issues/53), [#141](https://github.com/wireviz/WireViz/pull/141))
|
||||||
- Remove HTML links from the input attributes ([#164](https://github.com/formatc1702/WireViz/pull/164))
|
- Remove HTML links from the input attributes ([#164](https://github.com/wireviz/WireViz/pull/164))
|
||||||
- Add harness metadata section ([#158](https://github.com/formatc1702/WireViz/issues/158), [#214](https://github.com/formatc1702/WireViz/pull/214))
|
- Add harness metadata section ([#158](https://github.com/wireviz/WireViz/issues/158), [#214](https://github.com/wireviz/WireViz/pull/214))
|
||||||
- Add support for supplier and supplier part number information ([#240](https://github.com/formatc1702/WireViz/issues/240), [#241](https://github.com/formatc1702/WireViz/pull/241/))
|
- Add support for supplier and supplier part number information ([#240](https://github.com/wireviz/WireViz/issues/240), [#241](https://github.com/wireviz/WireViz/pull/241/))
|
||||||
- Add graph rendering options (colors, font, color name display style, ...) ([#158](https://github.com/formatc1702/WireViz/issues/158), [#214](https://github.com/formatc1702/WireViz/pull/214))
|
- Add graph rendering options (background colors, fontname, color name display style, ...) ([#158](https://github.com/wireviz/WireViz/issues/158), [#214](https://github.com/wireviz/WireViz/pull/214))
|
||||||
- Add support for supplier and supplier part number information ([#240](https://github.com/formatc1702/WireViz/issues/240), [#241](https://github.com/formatc1702/WireViz/pull/241/))
|
- Add support for background colors for cables and connectors, as well as for some individual cells ([#210](https://github.com/wireviz/WireViz/issues/210), [#219](https://github.com/wireviz/WireViz/pull/219))
|
||||||
- Add graph rendering options (colors, font, color name display style, ...) ([#158](https://github.com/formatc1702/WireViz/issues/158), [#214](https://github.com/formatc1702/WireViz/pull/214))
|
- Add optional tweaking of the .gv output ([#215](https://github.com/wireviz/WireViz/pull/215)) (experimental)
|
||||||
- Add support for background colors for cables and connectors, as well as for some individual cells ([#210](https://github.com/formatc1702/WireViz/issues/210), [#219](https://github.com/formatc1702/WireViz/pull/219))
|
|
||||||
- Add optional tweaking of the .gv output ([#215](https://github.com/formatc1702/WireViz/pull/215)) (experimental)
|
|
||||||
|
|
||||||
|
|
||||||
### Misc. fixes
|
### Misc. fixes
|
||||||
|
|
||||||
- Remove case-sensitivity issues with pin names and labels ([#160](https://github.com/formatc1702/WireViz/issues/160), [#229](https://github.com/formatc1702/WireViz/pull/229))
|
- Remove case-sensitivity issues with pin names and labels ([#160](https://github.com/wireviz/WireViz/issues/160), [#229](https://github.com/wireviz/WireViz/pull/229))
|
||||||
- Improve type hinting ([#156](https://github.com/formatc1702/WireViz/issues/156), [#163](https://github.com/formatc1702/WireViz/pull/163))
|
- Improve type hinting ([#156](https://github.com/wireviz/WireViz/issues/156), [#163](https://github.com/wireviz/WireViz/pull/163))
|
||||||
- Move BOM management and HTML functions to separate modules ([#151](https://github.com/formatc1702/WireViz/issues/151), [#192](https://github.com/formatc1702/WireViz/pull/192))
|
- Move BOM management and HTML functions to separate modules ([#151](https://github.com/wireviz/WireViz/issues/151), [#192](https://github.com/wireviz/WireViz/pull/192))
|
||||||
- Simplify BOM code ([#197](https://github.com/formatc1702/WireViz/pull/197))
|
- Simplify BOM code ([#197](https://github.com/wireviz/WireViz/pull/197))
|
||||||
- Bug fixes ([#218](https://github.com/formatc1702/WireViz/pull/218), [#221](https://github.com/formatc1702/WireViz/pull/221))
|
- Bug fixes ([#218](https://github.com/wireviz/WireViz/pull/218), [#221](https://github.com/wireviz/WireViz/pull/221))
|
||||||
|
|
||||||
### Known issues
|
### Known issues
|
||||||
|
|
||||||
- Including images in the harness may lead to issues in the following cases: ([#189](https://github.com/formatc1702/WireViz/pull/189), [#220](https://github.com/formatc1702/WireViz/issues/220))
|
- Including images in the harness may lead to issues in the following cases: ([#189](https://github.com/wireviz/WireViz/pull/189), [#220](https://github.com/wireviz/WireViz/issues/220))
|
||||||
- When using the `-o`/`--output_file` CLI option, specifying an output path in a different directory from the input file
|
- When using the `-o`/`--output_file` CLI option, specifying an output path in a different directory from the input file
|
||||||
- When using the `--prepend-file` CLI option, specifying a prepend file in a different directory from the mail input file
|
- When using the `--prepend-file` CLI option, specifying a prepend file in a different directory from the mail input file
|
||||||
|
|
||||||
## [0.2](https://github.com/formatc1702/WireViz/tree/v0.2) (2020-10-17)
|
|
||||||
|
## [0.2](https://github.com/wireviz/WireViz/tree/v0.2) (2020-10-17)
|
||||||
|
|
||||||
### Backward incompatible changes
|
### Backward incompatible changes
|
||||||
|
|
||||||
- Change names of connector attributes ([#77](https://github.com/formatc1702/WireViz/issues/77), [#105](https://github.com/formatc1702/WireViz/pull/105))
|
- Change names of connector attributes ([#77](https://github.com/wireviz/WireViz/issues/77), [#105](https://github.com/wireviz/WireViz/pull/105))
|
||||||
- `pinnumbers` is now `pins`
|
- `pinnumbers` is now `pins`
|
||||||
- `pinout` is now `pinlabels`
|
- `pinout` is now `pinlabels`
|
||||||
- Remove ferrules as a separate connector type ([#78](https://github.com/formatc1702/WireViz/issues/78), [#102](https://github.com/formatc1702/WireViz/pull/102))
|
- Remove ferrules as a separate connector type ([#78](https://github.com/wireviz/WireViz/issues/78), [#102](https://github.com/wireviz/WireViz/pull/102))
|
||||||
- Simple connectors like ferrules are now defined using the `style: simple` attribute
|
- Simple connectors like ferrules are now defined using the `style: simple` attribute
|
||||||
- Change the way loops are defined ([#79](https://github.com/formatc1702/WireViz/issues/79), [#75](https://github.com/formatc1702/WireViz/pull/75))
|
- Change the way loops are defined ([#79](https://github.com/wireviz/WireViz/issues/79), [#75](https://github.com/wireviz/WireViz/pull/75))
|
||||||
- Wires looping between two pins of the same connector are now handled via the connector's `loops` attribute.
|
- Wires looping between two pins of the same connector are now handled via the connector's `loops` attribute.
|
||||||
|
|
||||||
See the [syntax description](syntax.md) for details.
|
See the [syntax description](syntax.md) for details.
|
||||||
|
|
||||||
|
|
||||||
### New features
|
### New features
|
||||||
|
|
||||||
- Add bidirectional AWG/mm2 conversion ([#40](https://github.com/formatc1702/WireViz/issues/40), [#41](https://github.com/formatc1702/WireViz/pull/41))
|
- Add bidirectional AWG/mm2 conversion ([#40](https://github.com/wireviz/WireViz/issues/40), [#41](https://github.com/wireviz/WireViz/pull/41))
|
||||||
- Add support for part numbers ([#11](https://github.com/formatc1702/WireViz/pull/11), [#114](https://github.com/formatc1702/WireViz/issues/114), [#121](https://github.com/formatc1702/WireViz/pull/121))
|
- Add support for part numbers ([#11](https://github.com/wireviz/WireViz/pull/11), [#114](https://github.com/wireviz/WireViz/issues/114), [#121](https://github.com/wireviz/WireViz/pull/121))
|
||||||
- Add support for multicolored wires ([#12](https://github.com/formatc1702/WireViz/issues/12), [#17](https://github.com/formatc1702/WireViz/pull/17), [#96](https://github.com/formatc1702/WireViz/pull/96), [#131](https://github.com/formatc1702/WireViz/issues/131), [#132](https://github.com/formatc1702/WireViz/pull/132))
|
- Add support for multicolored wires ([#12](https://github.com/wireviz/WireViz/issues/12), [#17](https://github.com/wireviz/WireViz/pull/17), [#96](https://github.com/wireviz/WireViz/pull/96), [#131](https://github.com/wireviz/WireViz/issues/131), [#132](https://github.com/wireviz/WireViz/pull/132))
|
||||||
- Add support for images ([#27](https://github.com/formatc1702/WireViz/issues/27), [#153](https://github.com/formatc1702/WireViz/pull/153))
|
- Add support for images ([#27](https://github.com/wireviz/WireViz/issues/27), [#153](https://github.com/wireviz/WireViz/pull/153))
|
||||||
- Add ability to export data directly to other programs ([#55](https://github.com/formatc1702/WireViz/pull/55))
|
- Add ability to export data directly to other programs ([#55](https://github.com/wireviz/WireViz/pull/55))
|
||||||
- Add support for line breaks in various fields ([#49](https://github.com/formatc1702/WireViz/issues/49), [#64](https://github.com/formatc1702/WireViz/pull/64))
|
- Add support for line breaks in various fields ([#49](https://github.com/wireviz/WireViz/issues/49), [#64](https://github.com/wireviz/WireViz/pull/64))
|
||||||
- Allow using connector pin names to define connections ([#72](https://github.com/formatc1702/WireViz/issues/72), [#139](https://github.com/formatc1702/WireViz/issues/139), [#140](https://github.com/formatc1702/WireViz/pull/140))
|
- Allow using connector pin names to define connections ([#72](https://github.com/wireviz/WireViz/issues/72), [#139](https://github.com/wireviz/WireViz/issues/139), [#140](https://github.com/wireviz/WireViz/pull/140))
|
||||||
- Make defining connection sets easier and more flexible ([#67](https://github.com/formatc1702/WireViz/issues/67), [#75](https://github.com/formatc1702/WireViz/pull/75))
|
- Make defining connection sets easier and more flexible ([#67](https://github.com/wireviz/WireViz/issues/67), [#75](https://github.com/wireviz/WireViz/pull/75))
|
||||||
- Add new command line options ([#167](https://github.com/formatc1702/WireViz/issues/167), [#173](https://github.com/formatc1702/WireViz/pull/173))
|
- Add new command line options ([#167](https://github.com/wireviz/WireViz/issues/167), [#173](https://github.com/wireviz/WireViz/pull/173))
|
||||||
- Add new features to `build_examples.py` ([#118](https://github.com/formatc1702/WireViz/pull/118))
|
- Add new features to `build_examples.py` ([#118](https://github.com/wireviz/WireViz/pull/118))
|
||||||
- Add new colors ([#103](https://github.com/formatc1702/WireViz/pull/103), [#113](https://github.com/formatc1702/WireViz/pull/113), [#144](https://github.com/formatc1702/WireViz/issues/144), [#145](https://github.com/formatc1702/WireViz/pull/145))
|
- Add new colors ([#103](https://github.com/wireviz/WireViz/pull/103), [#113](https://github.com/wireviz/WireViz/pull/113), [#144](https://github.com/wireviz/WireViz/issues/144), [#145](https://github.com/wireviz/WireViz/pull/145))
|
||||||
- Improve documentation ([#107](https://github.com/formatc1702/WireViz/issues/107), [#111](https://github.com/formatc1702/WireViz/pull/111))
|
- Improve documentation ([#107](https://github.com/wireviz/WireViz/issues/107), [#111](https://github.com/wireviz/WireViz/pull/111))
|
||||||
|
|
||||||
|
|
||||||
### Misc. fixes
|
### Misc. fixes
|
||||||
|
|
||||||
- Improve BOM generation
|
- Improve BOM generation
|
||||||
- Add various input sanity checks
|
- Add various input sanity checks
|
||||||
- Improve HTML output ([#66](https://github.com/formatc1702/WireViz/issues/66), [#136](https://github.com/formatc1702/WireViz/pull/136), [#95](https://github.com/formatc1702/WireViz/pull/95), [#177](https://github.com/formatc1702/WireViz/pull/177))
|
- Improve HTML output ([#66](https://github.com/wireviz/WireViz/issues/66), [#136](https://github.com/wireviz/WireViz/pull/136), [#95](https://github.com/wireviz/WireViz/pull/95), [#177](https://github.com/wireviz/WireViz/pull/177))
|
||||||
- Fix node rendering bug ([#69](https://github.com/formatc1702/WireViz/issues/69), [#104](https://github.com/formatc1702/WireViz/pull/104))
|
- Fix node rendering bug ([#69](https://github.com/wireviz/WireViz/issues/69), [#104](https://github.com/wireviz/WireViz/pull/104))
|
||||||
- Improve shield rendering ([#125](https://github.com/formatc1702/WireViz/issues/125), [#126](https://github.com/formatc1702/WireViz/pull/126))
|
- Improve shield rendering ([#125](https://github.com/wireviz/WireViz/issues/125), [#126](https://github.com/wireviz/WireViz/pull/126))
|
||||||
- Add GitHub Linguist overrides ([#146](https://github.com/formatc1702/WireViz/issues/146), [#154](https://github.com/formatc1702/WireViz/pull/154))
|
- Add GitHub Linguist overrides ([#146](https://github.com/wireviz/WireViz/issues/146), [#154](https://github.com/wireviz/WireViz/pull/154))
|
||||||
|
|
||||||
|
|
||||||
## [0.1](https://github.com/formatc1702/WireViz/tree/v0.1) (2020-06-29)
|
## [0.1](https://github.com/wireviz/WireViz/tree/v0.1) (2020-06-29)
|
||||||
|
|
||||||
- Initial release
|
- Initial release
|
||||||
|
|||||||
@ -74,13 +74,13 @@ Output file:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
[Bill of Materials](../examples/demo01.bom.tsv) (auto-generated)
|
[Bill of Materials](../examples/demo01.tsv) (auto-generated)
|
||||||
|
|
||||||
### Demo 02
|
### Demo 02
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[Source](../examples/demo02.yml) - [Bill of Materials](../examples/demo02.bom.tsv)
|
[Source](../examples/demo02.yml) - [Bill of Materials](../examples/demo02.tsv)
|
||||||
|
|
||||||
### Syntax, tutorial and example gallery
|
### Syntax, tutorial and example gallery
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ Depending on the options specified, this will output some or all of the followin
|
|||||||
mywire.gv GraphViz output
|
mywire.gv GraphViz output
|
||||||
mywire.svg Wiring diagram as vector image
|
mywire.svg Wiring diagram as vector image
|
||||||
mywire.png Wiring diagram as raster image
|
mywire.png Wiring diagram as raster image
|
||||||
mywire.bom.tsv BOM (bill of materials) as tab-separated text file
|
mywire.tsv BOM (bill of materials) as tab-separated text file
|
||||||
mywire.html HTML page with wiring diagram and BOM embedded
|
mywire.html HTML page with wiring diagram and BOM embedded
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,7 @@ Possible group names:
|
|||||||
- `tutorial` to process`tutorial/{readme.md,tutorial*.*}`
|
- `tutorial` to process`tutorial/{readme.md,tutorial*.*}`
|
||||||
- `demos` to process`examples/demo*.*`
|
- `demos` to process`examples/demo*.*`
|
||||||
|
|
||||||
Affected filetypes: `.gv`, `.bom.tsv`, `.png`, `.svg`, `.html`
|
Affected filetypes: `.gv`, `.tsv`, `.png`, `.svg`, `.html`
|
||||||
|
|
||||||
|
|
||||||
## Usage hints
|
## Usage hints
|
||||||
|
|||||||
2
examples/demo01.gv
generated
@ -60,6 +60,8 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
X1:p7r:e -- X1:p8r:e
|
||||||
X2 [label=<
|
X2 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
|
|||||||
106
examples/demo01.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>demo01</title>
|
<title>demo01</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>demo01</h1>
|
<h1>demo01</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="833pt" height="291pt"
|
<svg width="833pt" height="291pt"
|
||||||
@ -18,6 +41,7 @@
|
|||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>X1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="139,-253 0,-253 0,0 139,0 139,-253"/>
|
<polygon fill="#ffffff" stroke="black" points="139,-253 0,-253 0,0 139,0 139,-253"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,0 0,-253 139,-253 139,0 0,0"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-229.5 0.5,-252.5 139.5,-252.5 139.5,-229.5 0.5,-229.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-229.5 0.5,-252.5 139.5,-252.5 139.5,-229.5 0.5,-229.5"/>
|
||||||
<text text-anchor="start" x="61" y="-237.3" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="61" y="-237.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-206.5 0.5,-229.5 48.5,-229.5 48.5,-206.5 0.5,-206.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-206.5 0.5,-229.5 48.5,-229.5 48.5,-206.5 0.5,-206.5"/>
|
||||||
@ -63,6 +87,13 @@
|
|||||||
<polygon fill="none" stroke="black" points="82.5,0.5 82.5,-22.5 139.5,-22.5 139.5,0.5 82.5,0.5"/>
|
<polygon fill="none" stroke="black" points="82.5,0.5 82.5,-22.5 139.5,-22.5 139.5,0.5 82.5,0.5"/>
|
||||||
<text text-anchor="start" x="107" y="-7.3" font-family="arial" font-size="14.00">9</text>
|
<text text-anchor="start" x="107" y="-7.3" font-family="arial" font-size="14.00">9</text>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1--X1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--X1:e</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139.95,-54.55C192,-66.5 298,-66.5 296,-45 298,-23.5 192,-23.5 139.95,-35.45"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139.5,-56.5C192,-68.5 298,-68.5 298,-45 298,-21.5 192,-21.5 139.5,-33.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139.05,-58.45C192,-70.5 298,-70.5 300,-45 298,-19.5 192,-19.5 139.05,-31.55"/>
|
||||||
|
</g>
|
||||||
<!-- W1 -->
|
<!-- W1 -->
|
||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>W1</title>
|
<title>W1</title>
|
||||||
@ -103,28 +134,28 @@
|
|||||||
<text text-anchor="start" x="315.5" y="-89.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="315.5" y="-89.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-100.5C217.18,-102.68 208.81,-195.68 283,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-100.5C217.18,-102.68 208.81,-195.68 283,-193.5"/>
|
||||||
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139,-102.5C215.19,-102.5 206.81,-195.5 283,-195.5"/>
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139,-102.5C215.19,-102.5 206.81,-195.5 283,-195.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-104.5C213.19,-102.32 204.82,-195.32 283,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-104.5C213.19,-102.32 204.82,-195.32 283,-197.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge4" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-170.5C202.76,-170.52 218.75,-168.52 283,-168.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-170.5C202.76,-170.52 218.75,-168.52 283,-168.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M139,-172.5C203.01,-172.5 218.99,-170.5 283,-170.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M139,-172.5C203.01,-172.5 218.99,-170.5 283,-170.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-174.5C203.25,-174.48 219.24,-172.48 283,-172.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-174.5C203.25,-174.48 219.24,-172.48 283,-172.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge6" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-147.5C202.54,-147.56 218.49,-143.56 283,-143.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-147.5C202.54,-147.56 218.49,-143.56 283,-143.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M139,-149.5C203.02,-149.5 218.98,-145.5 283,-145.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M139,-149.5C203.02,-149.5 218.98,-145.5 283,-145.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-151.5C203.51,-151.44 219.46,-147.44 283,-147.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-151.5C203.51,-151.44 219.46,-147.44 283,-147.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge8" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-102.5C203,-102.5 219,-103.5 283,-103.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-102.5C203,-102.5 219,-103.5 283,-103.5"/>
|
||||||
</g>
|
</g>
|
||||||
@ -132,6 +163,7 @@
|
|||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>X2</title>
|
<title>X2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="825,-254 638,-254 638,-139 825,-139 825,-254"/>
|
<polygon fill="#ffffff" stroke="black" points="825,-254 638,-254 638,-139 825,-139 825,-254"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="638,-139 638,-254 825,-254 825,-139 638,-139"/>
|
||||||
<polygon fill="none" stroke="black" points="638.5,-230.5 638.5,-253.5 825.5,-253.5 825.5,-230.5 638.5,-230.5"/>
|
<polygon fill="none" stroke="black" points="638.5,-230.5 638.5,-253.5 825.5,-253.5 825.5,-230.5 638.5,-230.5"/>
|
||||||
<text text-anchor="start" x="723" y="-238.3" font-family="arial" font-size="14.00">X2</text>
|
<text text-anchor="start" x="723" y="-238.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
<polygon fill="none" stroke="black" points="638.5,-207.5 638.5,-230.5 734.5,-230.5 734.5,-207.5 638.5,-207.5"/>
|
<polygon fill="none" stroke="black" points="638.5,-207.5 638.5,-230.5 734.5,-230.5 734.5,-207.5 638.5,-207.5"/>
|
||||||
@ -154,21 +186,21 @@
|
|||||||
<text text-anchor="start" x="764" y="-146.3" font-family="arial" font-size="14.00">TX</text>
|
<text text-anchor="start" x="764" y="-146.3" font-family="arial" font-size="14.00">TX</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-193.5C558,-193.5 574,-193.5 638,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-193.5C558,-193.5 574,-193.5 638,-193.5"/>
|
||||||
<path fill="none" stroke="#ffffff" stroke-width="2" d="M494,-195.5C558,-195.5 574,-195.5 638,-195.5"/>
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M494,-195.5C558,-195.5 574,-195.5 638,-195.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-197.5C558,-197.5 574,-197.5 638,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-197.5C558,-197.5 574,-197.5 638,-197.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge4" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-168.5C557.04,-169.36 571.68,-148.36 638,-147.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-168.5C557.04,-169.36 571.68,-148.36 638,-147.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M494,-170.5C558.68,-170.5 573.32,-149.5 638,-149.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M494,-170.5C558.68,-170.5 573.32,-149.5 638,-149.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-172.5C560.32,-171.64 574.96,-150.64 638,-151.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-172.5C560.32,-171.64 574.96,-150.64 638,-151.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge6" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-143.5C560.9,-144.59 574.67,-171.59 638,-170.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-143.5C560.9,-144.59 574.67,-171.59 638,-170.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M494,-145.5C559.12,-145.5 572.88,-172.5 638,-172.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M494,-145.5C559.12,-145.5 572.88,-172.5 638,-172.5"/>
|
||||||
@ -176,35 +208,47 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 3 x 0.25 mm² shielded</td>
|
<td class="bom_col_description">Cable, 3 x 0.25 mm² shielded</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, D-Sub, female, 9 pins</td>
|
<td class="bom_col_description">Connector, D-Sub, female, 9 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 3 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 3 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2</td>
|
<td class="bom_col_designators">X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
BIN
examples/demo01.png
generated
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 63 KiB |
25
examples/demo01.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="833pt" height="291pt"
|
<svg width="833pt" height="291pt"
|
||||||
@ -12,6 +12,7 @@
|
|||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>X1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="139,-253 0,-253 0,0 139,0 139,-253"/>
|
<polygon fill="#ffffff" stroke="black" points="139,-253 0,-253 0,0 139,0 139,-253"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,0 0,-253 139,-253 139,0 0,0"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-229.5 0.5,-252.5 139.5,-252.5 139.5,-229.5 0.5,-229.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-229.5 0.5,-252.5 139.5,-252.5 139.5,-229.5 0.5,-229.5"/>
|
||||||
<text text-anchor="start" x="61" y="-237.3" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="61" y="-237.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-206.5 0.5,-229.5 48.5,-229.5 48.5,-206.5 0.5,-206.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-206.5 0.5,-229.5 48.5,-229.5 48.5,-206.5 0.5,-206.5"/>
|
||||||
@ -57,6 +58,13 @@
|
|||||||
<polygon fill="none" stroke="black" points="82.5,0.5 82.5,-22.5 139.5,-22.5 139.5,0.5 82.5,0.5"/>
|
<polygon fill="none" stroke="black" points="82.5,0.5 82.5,-22.5 139.5,-22.5 139.5,0.5 82.5,0.5"/>
|
||||||
<text text-anchor="start" x="107" y="-7.3" font-family="arial" font-size="14.00">9</text>
|
<text text-anchor="start" x="107" y="-7.3" font-family="arial" font-size="14.00">9</text>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1--X1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--X1:e</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139.95,-54.55C192,-66.5 298,-66.5 296,-45 298,-23.5 192,-23.5 139.95,-35.45"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139.5,-56.5C192,-68.5 298,-68.5 298,-45 298,-21.5 192,-21.5 139.5,-33.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139.05,-58.45C192,-70.5 298,-70.5 300,-45 298,-19.5 192,-19.5 139.05,-31.55"/>
|
||||||
|
</g>
|
||||||
<!-- W1 -->
|
<!-- W1 -->
|
||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>W1</title>
|
<title>W1</title>
|
||||||
@ -97,28 +105,28 @@
|
|||||||
<text text-anchor="start" x="315.5" y="-89.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="315.5" y="-89.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-100.5C217.18,-102.68 208.81,-195.68 283,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-100.5C217.18,-102.68 208.81,-195.68 283,-193.5"/>
|
||||||
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139,-102.5C215.19,-102.5 206.81,-195.5 283,-195.5"/>
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M139,-102.5C215.19,-102.5 206.81,-195.5 283,-195.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-104.5C213.19,-102.32 204.82,-195.32 283,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-104.5C213.19,-102.32 204.82,-195.32 283,-197.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge4" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-170.5C202.76,-170.52 218.75,-168.52 283,-168.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-170.5C202.76,-170.52 218.75,-168.52 283,-168.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M139,-172.5C203.01,-172.5 218.99,-170.5 283,-170.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M139,-172.5C203.01,-172.5 218.99,-170.5 283,-170.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-174.5C203.25,-174.48 219.24,-172.48 283,-172.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-174.5C203.25,-174.48 219.24,-172.48 283,-172.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge6" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-147.5C202.54,-147.56 218.49,-143.56 283,-143.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-147.5C202.54,-147.56 218.49,-143.56 283,-143.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M139,-149.5C203.02,-149.5 218.98,-145.5 283,-145.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M139,-149.5C203.02,-149.5 218.98,-145.5 283,-145.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-151.5C203.51,-151.44 219.46,-147.44 283,-147.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-151.5C203.51,-151.44 219.46,-147.44 283,-147.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- X1--W1 -->
|
<!-- X1--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge8" class="edge">
|
||||||
<title>X1:e--W1:w</title>
|
<title>X1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-102.5C203,-102.5 219,-103.5 283,-103.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M139,-102.5C203,-102.5 219,-103.5 283,-103.5"/>
|
||||||
</g>
|
</g>
|
||||||
@ -126,6 +134,7 @@
|
|||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>X2</title>
|
<title>X2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="825,-254 638,-254 638,-139 825,-139 825,-254"/>
|
<polygon fill="#ffffff" stroke="black" points="825,-254 638,-254 638,-139 825,-139 825,-254"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="638,-139 638,-254 825,-254 825,-139 638,-139"/>
|
||||||
<polygon fill="none" stroke="black" points="638.5,-230.5 638.5,-253.5 825.5,-253.5 825.5,-230.5 638.5,-230.5"/>
|
<polygon fill="none" stroke="black" points="638.5,-230.5 638.5,-253.5 825.5,-253.5 825.5,-230.5 638.5,-230.5"/>
|
||||||
<text text-anchor="start" x="723" y="-238.3" font-family="arial" font-size="14.00">X2</text>
|
<text text-anchor="start" x="723" y="-238.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
<polygon fill="none" stroke="black" points="638.5,-207.5 638.5,-230.5 734.5,-230.5 734.5,-207.5 638.5,-207.5"/>
|
<polygon fill="none" stroke="black" points="638.5,-207.5 638.5,-230.5 734.5,-230.5 734.5,-207.5 638.5,-207.5"/>
|
||||||
@ -148,21 +157,21 @@
|
|||||||
<text text-anchor="start" x="764" y="-146.3" font-family="arial" font-size="14.00">TX</text>
|
<text text-anchor="start" x="764" y="-146.3" font-family="arial" font-size="14.00">TX</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-193.5C558,-193.5 574,-193.5 638,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-193.5C558,-193.5 574,-193.5 638,-193.5"/>
|
||||||
<path fill="none" stroke="#ffffff" stroke-width="2" d="M494,-195.5C558,-195.5 574,-195.5 638,-195.5"/>
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M494,-195.5C558,-195.5 574,-195.5 638,-195.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-197.5C558,-197.5 574,-197.5 638,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-197.5C558,-197.5 574,-197.5 638,-197.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge4" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-168.5C557.04,-169.36 571.68,-148.36 638,-147.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-168.5C557.04,-169.36 571.68,-148.36 638,-147.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M494,-170.5C558.68,-170.5 573.32,-149.5 638,-149.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M494,-170.5C558.68,-170.5 573.32,-149.5 638,-149.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-172.5C560.32,-171.64 574.96,-150.64 638,-151.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-172.5C560.32,-171.64 574.96,-150.64 638,-151.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--X2 -->
|
<!-- W1--X2 -->
|
||||||
<g id="edge6" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>W1:e--X2:w</title>
|
<title>W1:e--X2:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-143.5C560.9,-144.59 574.67,-171.59 638,-170.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M494,-143.5C560.9,-144.59 574.67,-171.59 638,-170.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M494,-145.5C559.12,-145.5 572.88,-172.5 638,-172.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M494,-145.5C559.12,-145.5 572.88,-172.5 638,-172.5"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@ -1,8 +1,13 @@
|
|||||||
|
metadata:
|
||||||
|
title: demo01
|
||||||
|
|
||||||
connectors:
|
connectors:
|
||||||
X1:
|
X1:
|
||||||
type: D-Sub
|
type: D-Sub
|
||||||
subtype: female
|
subtype: female
|
||||||
pinlabels: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI]
|
pinlabels: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI]
|
||||||
|
loops:
|
||||||
|
- [7,8]
|
||||||
X2:
|
X2:
|
||||||
type: Molex KK 254
|
type: Molex KK 254
|
||||||
subtype: female
|
subtype: female
|
||||||
|
|||||||
8
examples/demo02.gv
generated
@ -168,7 +168,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_1 [label=<
|
AUTOGENERATED_F_1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -180,7 +180,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_2 [label=<
|
AUTOGENERATED_F_2 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -487,10 +487,10 @@ graph {
|
|||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style="filled,dashed"]
|
> fillcolor="#FFFFFF" shape=box style="filled,dashed"]
|
||||||
edge [color="#000000:#000000:#000000"]
|
edge [color="#000000:#000000:#000000"]
|
||||||
_ferrule_crimp_1:e -- W4:w1:w
|
AUTOGENERATED_F_1:e -- W4:w1:w
|
||||||
W4:w1:e -- X4:p1l:w
|
W4:w1:e -- X4:p1l:w
|
||||||
edge [color="#000000:#ff0000:#000000"]
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
_ferrule_crimp_2:e -- W4:w2:w
|
AUTOGENERATED_F_2:e -- W4:w2:w
|
||||||
W4:w2:e -- X4:p2l:w
|
W4:w2:e -- X4:p2l:w
|
||||||
W4 [label=<
|
W4 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
|||||||
448
examples/demo02.html
generated
@ -1,13 +1,194 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"><head>
|
<html>
|
||||||
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>demo02</title>
|
<title>WireViz Demo 2</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
<h1>demo02</h1>
|
body {
|
||||||
<h2>Diagram</h2>
|
font-family: arial;
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
background-color: #ffffff;
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
}
|
||||||
|
|
||||||
|
table, td, th, #frame {
|
||||||
|
border: 0.35mm solid black; /* line weight based on DIN 15 */
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
padding: 0;
|
||||||
|
border-bottom: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-spacing: 0mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
border-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
/* display: inline-block; */
|
||||||
|
white-space: nowrap;
|
||||||
|
font-size: 2.8mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Canvas size based on DIN 823 / DIN 6771 / EN ISO 5457 */
|
||||||
|
|
||||||
|
#frame {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.A4, .sheetsize_default { /* portrait */
|
||||||
|
width: 180mm;
|
||||||
|
height: 277mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.A3 { /* landscape */
|
||||||
|
width: 390mm;
|
||||||
|
height: 277mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.A2 { /* landscape */
|
||||||
|
width: 564mm;
|
||||||
|
height: 400mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#diagram {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
height: calc(100% - 13 * 4.25mm);
|
||||||
|
/* TODO: auto-adapt to height of title block + BOM table;
|
||||||
|
BOM table might be above (A4) or to the left (A3 and larger) of the title block */
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#diagram svg, #diagram img {
|
||||||
|
max-width: 95%;
|
||||||
|
max-height: 100%;
|
||||||
|
position: relative;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#titleblock {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0mm;
|
||||||
|
right: -0mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#titleblock table {
|
||||||
|
width: 180mm;
|
||||||
|
height: 38.25mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#titleblock tr, #bom tr {
|
||||||
|
height: 4.25mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.A4 #bom { /* BOM on top of title block */
|
||||||
|
position: absolute;
|
||||||
|
bottom: 38.25mm;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.A3 #bom, .A2 #bom { /* BOM to the left of title block */
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0mm;
|
||||||
|
left: 0mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom table {
|
||||||
|
width:180mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom .bom_col_id {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom .bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
width: 16mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date {
|
||||||
|
width: 10mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revno {
|
||||||
|
text-align: center;
|
||||||
|
width: 6mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog {
|
||||||
|
width: 22mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process {
|
||||||
|
width: 18mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
width: 82mm;
|
||||||
|
font-size: 5.6mm;
|
||||||
|
text-align: center;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.company {
|
||||||
|
font-size: 4mm;
|
||||||
|
text-align: center;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.partno {
|
||||||
|
font-size: 4mm;
|
||||||
|
text-align: center;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheetno {
|
||||||
|
width: 12.75mm;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<style type="text/css" media="print">
|
||||||
|
|
||||||
|
@page {
|
||||||
|
size: auto;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: auto-adjust based on portrait (larger margin on left) or landscape (larger margin on top) */
|
||||||
|
#page {
|
||||||
|
margin: 10mm;
|
||||||
|
margin-left: 20mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="page">
|
||||||
|
<div id="frame" class="A3">
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
|
||||||
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="882pt" height="767pt"
|
<svg width="882pt" height="767pt"
|
||||||
@ -18,6 +199,7 @@
|
|||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>X1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="189.5,-517.5 2.5,-517.5 2.5,-287.5 189.5,-287.5 189.5,-517.5"/>
|
<polygon fill="#ffffff" stroke="black" points="189.5,-517.5 2.5,-517.5 2.5,-287.5 189.5,-287.5 189.5,-517.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="2.5,-287.5 2.5,-517.5 189.5,-517.5 189.5,-287.5 2.5,-287.5"/>
|
||||||
<polygon fill="none" stroke="black" points="3,-494.5 3,-517.5 190,-517.5 190,-494.5 3,-494.5"/>
|
<polygon fill="none" stroke="black" points="3,-494.5 3,-517.5 190,-517.5 190,-494.5 3,-494.5"/>
|
||||||
<text text-anchor="start" x="87.5" y="-502.3" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="87.5" y="-502.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
<polygon fill="none" stroke="black" points="3,-471.5 3,-494.5 99,-494.5 99,-471.5 3,-471.5"/>
|
<polygon fill="none" stroke="black" points="3,-471.5 3,-494.5 99,-494.5 99,-471.5 3,-471.5"/>
|
||||||
@ -264,6 +446,7 @@
|
|||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>X2</title>
|
<title>X2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-726.5 687,-726.5 687,-588.5 874,-588.5 874,-726.5"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-726.5 687,-726.5 687,-588.5 874,-588.5 874,-726.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-588.5 687,-726.5 874,-726.5 874,-588.5 687,-588.5"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-703.5 687.5,-726.5 874.5,-726.5 874.5,-703.5 687.5,-703.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-703.5 687.5,-726.5 874.5,-726.5 874.5,-703.5 687.5,-703.5"/>
|
||||||
<text text-anchor="start" x="772" y="-711.3" font-family="arial" font-size="14.00">X2</text>
|
<text text-anchor="start" x="772" y="-711.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-680.5 687.5,-703.5 783.5,-703.5 783.5,-680.5 687.5,-680.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-680.5 687.5,-703.5 783.5,-703.5 783.5,-680.5 687.5,-680.5"/>
|
||||||
@ -293,6 +476,7 @@
|
|||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>X3</title>
|
<title>X3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-518.5 687,-518.5 687,-380.5 874,-380.5 874,-518.5"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-518.5 687,-518.5 687,-380.5 874,-380.5 874,-518.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-380.5 687,-518.5 874,-518.5 874,-380.5 687,-380.5"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-495.5 687.5,-518.5 874.5,-518.5 874.5,-495.5 687.5,-495.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-495.5 687.5,-518.5 874.5,-518.5 874.5,-495.5 687.5,-495.5"/>
|
||||||
<text text-anchor="start" x="772" y="-503.3" font-family="arial" font-size="14.00">X3</text>
|
<text text-anchor="start" x="772" y="-503.3" font-family="arial" font-size="14.00">X3</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-472.5 687.5,-495.5 783.5,-495.5 783.5,-472.5 687.5,-472.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-472.5 687.5,-495.5 783.5,-495.5 783.5,-472.5 687.5,-472.5"/>
|
||||||
@ -322,6 +506,7 @@
|
|||||||
<g id="node4" class="node">
|
<g id="node4" class="node">
|
||||||
<title>X4</title>
|
<title>X4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-322 687,-322 687,-161 874,-161 874,-322"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-322 687,-322 687,-161 874,-161 874,-322"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-161 687,-322 874,-322 874,-161 687,-161"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-298.5 687.5,-321.5 874.5,-321.5 874.5,-298.5 687.5,-298.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-298.5 687.5,-321.5 874.5,-321.5 874.5,-298.5 687.5,-298.5"/>
|
||||||
<text text-anchor="start" x="772" y="-306.3" font-family="arial" font-size="14.00">X4</text>
|
<text text-anchor="start" x="772" y="-306.3" font-family="arial" font-size="14.00">X4</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-275.5 687.5,-298.5 783.5,-298.5 783.5,-275.5 687.5,-275.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-275.5 687.5,-298.5 783.5,-298.5 783.5,-275.5 687.5,-275.5"/>
|
||||||
@ -351,10 +536,11 @@
|
|||||||
<polygon fill="none" stroke="black" points="767.5,-160.5 767.5,-183.5 874.5,-183.5 874.5,-160.5 767.5,-160.5"/>
|
<polygon fill="none" stroke="black" points="767.5,-160.5 767.5,-183.5 874.5,-183.5 874.5,-160.5 767.5,-160.5"/>
|
||||||
<text text-anchor="start" x="806.5" y="-168.3" font-family="arial" font-size="14.00">SCK</text>
|
<text text-anchor="start" x="806.5" y="-168.3" font-family="arial" font-size="14.00">SCK</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1 -->
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
<title>_ferrule_crimp_1</title>
|
<title>AUTOGENERATED_F_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="192,-70 0,-70 0,-47 192,-47 192,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="192,-70 0,-70 0,-47 192,-47 192,-70"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,-47 0,-70 192,-70 192,-47 0,-47"/>
|
||||||
<polygon fill="none" stroke="black" points="0,-46.5 0,-69.5 89,-69.5 89,-46.5 0,-46.5"/>
|
<polygon fill="none" stroke="black" points="0,-46.5 0,-69.5 89,-69.5 89,-46.5 0,-46.5"/>
|
||||||
<text text-anchor="start" x="4" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="89,-46.5 89,-69.5 157,-69.5 157,-46.5 89,-46.5"/>
|
<polygon fill="none" stroke="black" points="89,-46.5 89,-69.5 157,-69.5 157,-46.5 89,-46.5"/>
|
||||||
@ -389,17 +575,18 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="340.5,-19.5 340.5,-21.5 539.5,-21.5 539.5,-19.5 340.5,-19.5"/>
|
<polygon fill="#000000" stroke="transparent" points="340.5,-19.5 340.5,-21.5 539.5,-21.5 539.5,-19.5 340.5,-19.5"/>
|
||||||
<text text-anchor="start" x="351" y="-6.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="351" y="-6.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1--W4 -->
|
<!-- AUTOGENERATED_F_1--W4 -->
|
||||||
<g id="edge25" class="edge">
|
<g id="edge25" class="edge">
|
||||||
<title>_ferrule_crimp_1:e--W4:w</title>
|
<title>AUTOGENERATED_F_1:e--W4:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-56.5C256.61,-56.85 272.63,-45.85 339.5,-45.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-56.5C256.61,-56.85 272.63,-45.85 339.5,-45.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-58.5C257.74,-58.5 273.76,-47.5 339.5,-47.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-58.5C257.74,-58.5 273.76,-47.5 339.5,-47.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-60.5C258.87,-60.15 274.89,-49.15 339.5,-49.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-60.5C258.87,-60.15 274.89,-49.15 339.5,-49.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2 -->
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
<g id="node6" class="node">
|
<g id="node6" class="node">
|
||||||
<title>_ferrule_crimp_2</title>
|
<title>AUTOGENERATED_F_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="192,-23 0,-23 0,0 192,0 192,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="192,-23 0,-23 0,0 192,0 192,-23"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,0 0,-23 192,-23 192,0 0,0"/>
|
||||||
<polygon fill="none" stroke="black" points="0,0.5 0,-22.5 89,-22.5 89,0.5 0,0.5"/>
|
<polygon fill="none" stroke="black" points="0,0.5 0,-22.5 89,-22.5 89,0.5 0,0.5"/>
|
||||||
<text text-anchor="start" x="4" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="89,0.5 89,-22.5 157,-22.5 157,0.5 89,0.5"/>
|
<polygon fill="none" stroke="black" points="89,0.5 89,-22.5 157,-22.5 157,0.5 89,0.5"/>
|
||||||
@ -409,9 +596,9 @@
|
|||||||
<polygon fill="#ffff00" stroke="transparent" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
<polygon fill="#ffff00" stroke="transparent" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
||||||
<polygon fill="none" stroke="black" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
<polygon fill="none" stroke="black" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2--W4 -->
|
<!-- AUTOGENERATED_F_2--W4 -->
|
||||||
<g id="edge27" class="edge">
|
<g id="edge27" class="edge">
|
||||||
<title>_ferrule_crimp_2:e--W4:w</title>
|
<title>AUTOGENERATED_F_2:e--W4:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-9.5C258.87,-9.85 274.89,-20.85 339.5,-20.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-9.5C258.87,-9.85 274.89,-20.85 339.5,-20.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M192,-11.5C257.74,-11.5 273.76,-22.5 339.5,-22.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M192,-11.5C257.74,-11.5 273.76,-22.5 339.5,-22.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-13.5C256.61,-13.15 272.63,-24.15 339.5,-24.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-13.5C256.61,-13.15 272.63,-24.15 339.5,-24.5"/>
|
||||||
@ -516,98 +703,193 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
<h2>Bill of Materials</h2>
|
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<td class="bom_col_id">12</td>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<td class="bom_col_description">Wire, 0.14 mm², YE</td>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<td class="bom_col_unit">m</td>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">11</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 2 x 0.25 mm²</td>
|
<td class="bom_col_description">Wire, 0.14 mm², VT</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W4</td>
|
<td class="bom_col_designators">W3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">10</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Crimp ferrule, 0.25 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.14 mm², RD</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">9</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Wire, 0.14 mm², OG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2, X3</td>
|
<td class="bom_col_designators">W3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">8</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 5 pins</td>
|
<td class="bom_col_description">Wire, 0.14 mm², GN</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X4</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">7</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 8 pins</td>
|
<td class="bom_col_description">Wire, 0.14 mm², BU</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">W3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">6</td>
|
<td class="bom_col_id">6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², BK</td>
|
<td class="bom_col_description">Wire, 0.14 mm², BK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.9</td>
|
<td class="bom_col_qty">0.9</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3</td>
|
<td class="bom_col_designators">W1, W2, W3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">7</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², BU</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 8 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W3</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">8</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², GN</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 5 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">X4</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">9</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², OG</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W3</td>
|
<td class="bom_col_designators">X2, X3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">10</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², RD</td>
|
<td class="bom_col_description">Connector, Crimp ferrule, 0.25 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">11</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², VT</td>
|
<td class="bom_col_description">Cable, 2 x 0.25 mm²</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W3</td>
|
<td class="bom_col_designators">W4</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">12</td>
|
<th class="bom_col_id">Id</th>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.14 mm², YE</td>
|
<th class="bom_col_description">Description</th>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body></html>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="titleblock">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_8% --></td>
|
||||||
|
<td class="changelog"><!-- %revisions_8_changelog% --></td>
|
||||||
|
<td class="date"><!-- %revisions_8_date% --></td>
|
||||||
|
<td class="name"><!-- %revisions_8_name% --></td>
|
||||||
|
<td class="process"></td>
|
||||||
|
<td class="date">Date</td>
|
||||||
|
<td class="name">Name</td>
|
||||||
|
<td class="title" colspan="3" rowspan="5">WireViz Demo 2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_7% --></td>
|
||||||
|
<td><!-- %revisions_7_changelog% --></td>
|
||||||
|
<td><!-- %revisions_7_date% --></td>
|
||||||
|
<td><!-- %revisions_7_name% --></td>
|
||||||
|
<td>Created</td>
|
||||||
|
<td>2020-05-20</td>
|
||||||
|
<td>D. Rojas</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_6% --></td>
|
||||||
|
<td><!-- %revisions_6_changelog% --></td>
|
||||||
|
<td><!-- %revisions_6_date% --></td>
|
||||||
|
<td><!-- %revisions_6_name% --></td>
|
||||||
|
<td>Approved</td>
|
||||||
|
<td>2020-05-20</td>
|
||||||
|
<td>D. Rojas</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_5% --></td>
|
||||||
|
<td><!-- %revisions_5_changelog% --></td>
|
||||||
|
<td><!-- %revisions_5_date% --></td>
|
||||||
|
<td><!-- %revisions_5_name% --></td>
|
||||||
|
<td><!-- %authors_3% --></td>
|
||||||
|
<td><!-- %authors_3_date% --></td>
|
||||||
|
<td><!-- %authors_3_name% --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_4% --></td>
|
||||||
|
<td><!-- %revisions_4_changelog% --></td>
|
||||||
|
<td><!-- %revisions_4_date% --></td>
|
||||||
|
<td><!-- %revisions_4_name% --></td>
|
||||||
|
<td colspan="2"></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_3% --></td>
|
||||||
|
<td><!-- %revisions_3_changelog% --></td>
|
||||||
|
<td><!-- %revisions_3_date% --></td>
|
||||||
|
<td><!-- %revisions_3_name% --></td>
|
||||||
|
<td class="company" colspan="3" rowspan="3"><!-- %company% --></td>
|
||||||
|
<td class="partno" colspan="2" rowspan="3">WV-DEMO-02</td>
|
||||||
|
<td class="sheetno" rowspan="2">Sheet<br />1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno"><!-- %revisions_2% --></td>
|
||||||
|
<td><!-- %revisions_2_changelog% --></td>
|
||||||
|
<td><!-- %revisions_2_date% --></td>
|
||||||
|
<td><!-- %revisions_2_name% --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="revno">A</td>
|
||||||
|
<td>WireViz 0.2 release</td>
|
||||||
|
<td>2020-10-17</td>
|
||||||
|
<td>D. Rojas</td>
|
||||||
|
<td class="sheetno">of 1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Rev</td>
|
||||||
|
<td>Changelog</td>
|
||||||
|
<td>Date</td>
|
||||||
|
<td>Name</td>
|
||||||
|
<td colspan="3"></td>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="2"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div> <!-- /titleblock -->
|
||||||
|
|
||||||
|
</div> <!-- /frame -->
|
||||||
|
</div> <!-- /page -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
BIN
examples/demo02.png
generated
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 185 KiB |
24
examples/demo02.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="882pt" height="767pt"
|
<svg width="882pt" height="767pt"
|
||||||
@ -12,6 +12,7 @@
|
|||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>X1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="189.5,-517.5 2.5,-517.5 2.5,-287.5 189.5,-287.5 189.5,-517.5"/>
|
<polygon fill="#ffffff" stroke="black" points="189.5,-517.5 2.5,-517.5 2.5,-287.5 189.5,-287.5 189.5,-517.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="2.5,-287.5 2.5,-517.5 189.5,-517.5 189.5,-287.5 2.5,-287.5"/>
|
||||||
<polygon fill="none" stroke="black" points="3,-494.5 3,-517.5 190,-517.5 190,-494.5 3,-494.5"/>
|
<polygon fill="none" stroke="black" points="3,-494.5 3,-517.5 190,-517.5 190,-494.5 3,-494.5"/>
|
||||||
<text text-anchor="start" x="87.5" y="-502.3" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="87.5" y="-502.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
<polygon fill="none" stroke="black" points="3,-471.5 3,-494.5 99,-494.5 99,-471.5 3,-471.5"/>
|
<polygon fill="none" stroke="black" points="3,-471.5 3,-494.5 99,-494.5 99,-471.5 3,-471.5"/>
|
||||||
@ -258,6 +259,7 @@
|
|||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>X2</title>
|
<title>X2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-726.5 687,-726.5 687,-588.5 874,-588.5 874,-726.5"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-726.5 687,-726.5 687,-588.5 874,-588.5 874,-726.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-588.5 687,-726.5 874,-726.5 874,-588.5 687,-588.5"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-703.5 687.5,-726.5 874.5,-726.5 874.5,-703.5 687.5,-703.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-703.5 687.5,-726.5 874.5,-726.5 874.5,-703.5 687.5,-703.5"/>
|
||||||
<text text-anchor="start" x="772" y="-711.3" font-family="arial" font-size="14.00">X2</text>
|
<text text-anchor="start" x="772" y="-711.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-680.5 687.5,-703.5 783.5,-703.5 783.5,-680.5 687.5,-680.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-680.5 687.5,-703.5 783.5,-703.5 783.5,-680.5 687.5,-680.5"/>
|
||||||
@ -287,6 +289,7 @@
|
|||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>X3</title>
|
<title>X3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-518.5 687,-518.5 687,-380.5 874,-380.5 874,-518.5"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-518.5 687,-518.5 687,-380.5 874,-380.5 874,-518.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-380.5 687,-518.5 874,-518.5 874,-380.5 687,-380.5"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-495.5 687.5,-518.5 874.5,-518.5 874.5,-495.5 687.5,-495.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-495.5 687.5,-518.5 874.5,-518.5 874.5,-495.5 687.5,-495.5"/>
|
||||||
<text text-anchor="start" x="772" y="-503.3" font-family="arial" font-size="14.00">X3</text>
|
<text text-anchor="start" x="772" y="-503.3" font-family="arial" font-size="14.00">X3</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-472.5 687.5,-495.5 783.5,-495.5 783.5,-472.5 687.5,-472.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-472.5 687.5,-495.5 783.5,-495.5 783.5,-472.5 687.5,-472.5"/>
|
||||||
@ -316,6 +319,7 @@
|
|||||||
<g id="node4" class="node">
|
<g id="node4" class="node">
|
||||||
<title>X4</title>
|
<title>X4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="874,-322 687,-322 687,-161 874,-161 874,-322"/>
|
<polygon fill="#ffffff" stroke="black" points="874,-322 687,-322 687,-161 874,-161 874,-322"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="687,-161 687,-322 874,-322 874,-161 687,-161"/>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-298.5 687.5,-321.5 874.5,-321.5 874.5,-298.5 687.5,-298.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-298.5 687.5,-321.5 874.5,-321.5 874.5,-298.5 687.5,-298.5"/>
|
||||||
<text text-anchor="start" x="772" y="-306.3" font-family="arial" font-size="14.00">X4</text>
|
<text text-anchor="start" x="772" y="-306.3" font-family="arial" font-size="14.00">X4</text>
|
||||||
<polygon fill="none" stroke="black" points="687.5,-275.5 687.5,-298.5 783.5,-298.5 783.5,-275.5 687.5,-275.5"/>
|
<polygon fill="none" stroke="black" points="687.5,-275.5 687.5,-298.5 783.5,-298.5 783.5,-275.5 687.5,-275.5"/>
|
||||||
@ -345,10 +349,11 @@
|
|||||||
<polygon fill="none" stroke="black" points="767.5,-160.5 767.5,-183.5 874.5,-183.5 874.5,-160.5 767.5,-160.5"/>
|
<polygon fill="none" stroke="black" points="767.5,-160.5 767.5,-183.5 874.5,-183.5 874.5,-160.5 767.5,-160.5"/>
|
||||||
<text text-anchor="start" x="806.5" y="-168.3" font-family="arial" font-size="14.00">SCK</text>
|
<text text-anchor="start" x="806.5" y="-168.3" font-family="arial" font-size="14.00">SCK</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1 -->
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
<title>_ferrule_crimp_1</title>
|
<title>AUTOGENERATED_F_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="192,-70 0,-70 0,-47 192,-47 192,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="192,-70 0,-70 0,-47 192,-47 192,-70"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,-47 0,-70 192,-70 192,-47 0,-47"/>
|
||||||
<polygon fill="none" stroke="black" points="0,-46.5 0,-69.5 89,-69.5 89,-46.5 0,-46.5"/>
|
<polygon fill="none" stroke="black" points="0,-46.5 0,-69.5 89,-69.5 89,-46.5 0,-46.5"/>
|
||||||
<text text-anchor="start" x="4" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="89,-46.5 89,-69.5 157,-69.5 157,-46.5 89,-46.5"/>
|
<polygon fill="none" stroke="black" points="89,-46.5 89,-69.5 157,-69.5 157,-46.5 89,-46.5"/>
|
||||||
@ -383,17 +388,18 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="340.5,-19.5 340.5,-21.5 539.5,-21.5 539.5,-19.5 340.5,-19.5"/>
|
<polygon fill="#000000" stroke="transparent" points="340.5,-19.5 340.5,-21.5 539.5,-21.5 539.5,-19.5 340.5,-19.5"/>
|
||||||
<text text-anchor="start" x="351" y="-6.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="351" y="-6.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1--W4 -->
|
<!-- AUTOGENERATED_F_1--W4 -->
|
||||||
<g id="edge25" class="edge">
|
<g id="edge25" class="edge">
|
||||||
<title>_ferrule_crimp_1:e--W4:w</title>
|
<title>AUTOGENERATED_F_1:e--W4:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-56.5C256.61,-56.85 272.63,-45.85 339.5,-45.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-56.5C256.61,-56.85 272.63,-45.85 339.5,-45.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-58.5C257.74,-58.5 273.76,-47.5 339.5,-47.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-58.5C257.74,-58.5 273.76,-47.5 339.5,-47.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-60.5C258.87,-60.15 274.89,-49.15 339.5,-49.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-60.5C258.87,-60.15 274.89,-49.15 339.5,-49.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2 -->
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
<g id="node6" class="node">
|
<g id="node6" class="node">
|
||||||
<title>_ferrule_crimp_2</title>
|
<title>AUTOGENERATED_F_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="192,-23 0,-23 0,0 192,0 192,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="192,-23 0,-23 0,0 192,0 192,-23"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0,0 0,-23 192,-23 192,0 0,0"/>
|
||||||
<polygon fill="none" stroke="black" points="0,0.5 0,-22.5 89,-22.5 89,0.5 0,0.5"/>
|
<polygon fill="none" stroke="black" points="0,0.5 0,-22.5 89,-22.5 89,0.5 0,0.5"/>
|
||||||
<text text-anchor="start" x="4" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="89,0.5 89,-22.5 157,-22.5 157,0.5 89,0.5"/>
|
<polygon fill="none" stroke="black" points="89,0.5 89,-22.5 157,-22.5 157,0.5 89,0.5"/>
|
||||||
@ -403,9 +409,9 @@
|
|||||||
<polygon fill="#ffff00" stroke="transparent" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
<polygon fill="#ffff00" stroke="transparent" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
||||||
<polygon fill="none" stroke="black" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
<polygon fill="none" stroke="black" points="184,0.5 184,-22.5 192,-22.5 192,0.5 184,0.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2--W4 -->
|
<!-- AUTOGENERATED_F_2--W4 -->
|
||||||
<g id="edge27" class="edge">
|
<g id="edge27" class="edge">
|
||||||
<title>_ferrule_crimp_2:e--W4:w</title>
|
<title>AUTOGENERATED_F_2:e--W4:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-9.5C258.87,-9.85 274.89,-20.85 339.5,-20.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-9.5C258.87,-9.85 274.89,-20.85 339.5,-20.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M192,-11.5C257.74,-11.5 273.76,-22.5 339.5,-22.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M192,-11.5C257.74,-11.5 273.76,-22.5 339.5,-22.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-13.5C256.61,-13.15 272.63,-24.15 339.5,-24.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M192,-13.5C256.61,-13.15 272.63,-24.15 339.5,-24.5"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 41 KiB |
73
examples/ex01.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex01</title>
|
<title>ex01</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex01</h1>
|
<h1>ex01</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="943pt" height="232pt"
|
<svg width="943pt" height="232pt"
|
||||||
@ -182,28 +205,40 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, Serial, 4 x 0.25 mm² shielded</td>
|
<td class="bom_col_description">Cable, Serial, 4 x 0.25 mm² shielded</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2</td>
|
<td class="bom_col_designators">X1, X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex01.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="943pt" height="232pt"
|
<svg width="943pt" height="232pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
93
examples/ex02.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex02</title>
|
<title>ex02</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex02</h1>
|
<h1>ex02</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="881pt" height="458pt"
|
<svg width="881pt" height="458pt"
|
||||||
@ -265,42 +288,54 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 2 x 0.25 mm²</td>
|
<td class="bom_col_description">Cable, 2 x 0.25 mm²</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 2 x 20 AWG</td>
|
<td class="bom_col_description">Cable, 2 x 20 AWG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W3</td>
|
<td class="bom_col_designators">W3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex Micro-Fit, female, 2 pins</td>
|
<td class="bom_col_description">Connector, Molex Micro-Fit, female, 2 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">3</td>
|
<td class="bom_col_qty">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2, X3, X4</td>
|
<td class="bom_col_designators">X2, X3, X4</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex Micro-Fit, male, 2 pins</td>
|
<td class="bom_col_description">Connector, Molex Micro-Fit, male, 2 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex02.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="881pt" height="458pt"
|
<svg width="881pt" height="458pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
93
examples/ex03.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex03</title>
|
<title>ex03</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex03</h1>
|
<h1>ex03</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="873pt" height="332pt"
|
<svg width="873pt" height="332pt"
|
||||||
@ -235,42 +258,54 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex Micro-Fit, female, 2 pins</td>
|
<td class="bom_col_description">Connector, Molex Micro-Fit, female, 2 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">3</td>
|
<td class="bom_col_qty">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2, X3, X4</td>
|
<td class="bom_col_designators">X2, X3, X4</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex Micro-Fit, male, 2 pins</td>
|
<td class="bom_col_description">Connector, Molex Micro-Fit, male, 2 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², BK</td>
|
<td class="bom_col_description">Wire, 0.25 mm², BK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², RD</td>
|
<td class="bom_col_description">Wire, 0.25 mm², RD</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex03.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="873pt" height="332pt"
|
<svg width="873pt" height="332pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
48
examples/ex04.gv
generated
@ -4,7 +4,7 @@ graph {
|
|||||||
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
|
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]
|
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
|
||||||
edge [fontname=arial style=bold]
|
edge [fontname=arial style=bold]
|
||||||
_ferrule_crimp_1 [label=<
|
AUTOGENERATED_F_1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -13,7 +13,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_2 [label=<
|
AUTOGENERATED_F_2 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -22,7 +22,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_3 [label=<
|
AUTOGENERATED_F_3 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -31,7 +31,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_4 [label=<
|
AUTOGENERATED_F_4 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -40,7 +40,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_5 [label=<
|
AUTOGENERATED_F_5 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -49,7 +49,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_6 [label=<
|
AUTOGENERATED_F_6 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -58,7 +58,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_7 [label=<
|
AUTOGENERATED_F_7 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -67,7 +67,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_8 [label=<
|
AUTOGENERATED_F_8 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -76,7 +76,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_9 [label=<
|
AUTOGENERATED_F_9 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -85,7 +85,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_10 [label=<
|
AUTOGENERATED_F_10 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -94,7 +94,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_11 [label=<
|
AUTOGENERATED_F_11 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -103,7 +103,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
_ferrule_crimp_12 [label=<
|
AUTOGENERATED_F_12 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
@ -113,23 +113,23 @@ graph {
|
|||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
edge [color="#000000:#895956:#000000"]
|
edge [color="#000000:#895956:#000000"]
|
||||||
_ferrule_crimp_1:e -- W1:w1:w
|
AUTOGENERATED_F_1:e -- W1:w1:w
|
||||||
W1:w1:e -- _ferrule_crimp_7:w
|
W1:w1:e -- AUTOGENERATED_F_7:w
|
||||||
edge [color="#000000:#ff0000:#000000"]
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
_ferrule_crimp_2:e -- W1:w2:w
|
AUTOGENERATED_F_2:e -- W1:w2:w
|
||||||
W1:w2:e -- _ferrule_crimp_8:w
|
W1:w2:e -- AUTOGENERATED_F_8:w
|
||||||
edge [color="#000000:#ff8000:#000000"]
|
edge [color="#000000:#ff8000:#000000"]
|
||||||
_ferrule_crimp_3:e -- W1:w3:w
|
AUTOGENERATED_F_3:e -- W1:w3:w
|
||||||
W1:w3:e -- _ferrule_crimp_9:w
|
W1:w3:e -- AUTOGENERATED_F_9:w
|
||||||
edge [color="#000000:#ffff00:#000000"]
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
_ferrule_crimp_4:e -- W1:w4:w
|
AUTOGENERATED_F_4:e -- W1:w4:w
|
||||||
W1:w4:e -- _ferrule_crimp_10:w
|
W1:w4:e -- AUTOGENERATED_F_10:w
|
||||||
edge [color="#000000:#00ff00:#000000"]
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
_ferrule_crimp_5:e -- W1:w5:w
|
AUTOGENERATED_F_5:e -- W1:w5:w
|
||||||
W1:w5:e -- _ferrule_crimp_11:w
|
W1:w5:e -- AUTOGENERATED_F_11:w
|
||||||
edge [color="#000000:#0066ff:#000000"]
|
edge [color="#000000:#0066ff:#000000"]
|
||||||
_ferrule_crimp_6:e -- W1:w6:w
|
AUTOGENERATED_F_6:e -- W1:w6:w
|
||||||
W1:w6:e -- _ferrule_crimp_12:w
|
W1:w6:e -- AUTOGENERATED_F_12:w
|
||||||
W1 [label=<
|
W1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
|
|||||||
219
examples/ex04.html
generated
@ -3,20 +3,43 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex04</title>
|
<title>ex04</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex04</h1>
|
<h1>ex04</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="673pt" height="287pt"
|
<svg width="673pt" height="287pt"
|
||||||
viewBox="0.00 0.00 673.00 286.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 673.00 286.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 282.5)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 282.5)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-282.5 669,-282.5 669,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-282.5 669,-282.5 669,4 -4,4"/>
|
||||||
<!-- _ferrule_crimp_1 -->
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>_ferrule_crimp_1</title>
|
<title>AUTOGENERATED_F_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-258 0,-258 0,-235 89,-235 89,-258"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-258 0,-258 0,-235 89,-235 89,-258"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-234.5 0.5,-257.5 89.5,-257.5 89.5,-234.5 0.5,-234.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-234.5 0.5,-257.5 89.5,-257.5 89.5,-234.5 0.5,-234.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -60,226 +83,238 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="233.5,-63.5 233.5,-65.5 432.5,-65.5 432.5,-63.5 233.5,-63.5"/>
|
<polygon fill="#000000" stroke="transparent" points="233.5,-63.5 233.5,-65.5 432.5,-65.5 432.5,-63.5 233.5,-63.5"/>
|
||||||
<text text-anchor="start" x="256.5" y="-50.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="256.5" y="-50.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1--W1 -->
|
<!-- AUTOGENERATED_F_1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_ferrule_crimp_1:e--W1:w</title>
|
<title>AUTOGENERATED_F_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-244.5C155.53,-246.25 162.51,-191.25 233,-189.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-244.5C155.53,-246.25 162.51,-191.25 233,-189.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M89,-246.5C157.51,-246.5 164.49,-191.5 233,-191.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M89,-246.5C157.51,-246.5 164.49,-191.5 233,-191.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-248.5C159.49,-246.75 166.47,-191.75 233,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-248.5C159.49,-246.75 166.47,-191.75 233,-193.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2 -->
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_ferrule_crimp_2</title>
|
<title>AUTOGENERATED_F_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-211 0,-211 0,-188 89,-188 89,-211"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-211 0,-211 0,-188 89,-188 89,-211"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-187.5 0.5,-210.5 89.5,-210.5 89.5,-187.5 0.5,-187.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-187.5 0.5,-210.5 89.5,-210.5 89.5,-187.5 0.5,-187.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2--W1 -->
|
<!-- AUTOGENERATED_F_2--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>_ferrule_crimp_2:e--W1:w</title>
|
<title>AUTOGENERATED_F_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-197.5C152.79,-198.78 165.47,-165.78 233,-164.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-197.5C152.79,-198.78 165.47,-165.78 233,-164.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M89,-199.5C154.66,-199.5 167.34,-166.5 233,-166.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M89,-199.5C154.66,-199.5 167.34,-166.5 233,-166.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-201.5C156.53,-200.22 169.21,-167.22 233,-168.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-201.5C156.53,-200.22 169.21,-167.22 233,-168.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_3 -->
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>_ferrule_crimp_3</title>
|
<title>AUTOGENERATED_F_3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-164 0,-164 0,-141 89,-141 89,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-164 0,-164 0,-141 89,-141 89,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_3--W1 -->
|
<!-- AUTOGENERATED_F_3--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>_ferrule_crimp_3:e--W1:w</title>
|
<title>AUTOGENERATED_F_3:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-150.5C152.04,-150.86 167.66,-139.86 233,-139.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-150.5C152.04,-150.86 167.66,-139.86 233,-139.5"/>
|
||||||
<path fill="none" stroke="#ff8000" stroke-width="2" d="M89,-152.5C153.19,-152.5 168.81,-141.5 233,-141.5"/>
|
<path fill="none" stroke="#ff8000" stroke-width="2" d="M89,-152.5C153.19,-152.5 168.81,-141.5 233,-141.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-154.5C154.34,-154.14 169.96,-143.14 233,-143.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-154.5C154.34,-154.14 169.96,-143.14 233,-143.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_4 -->
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
<g id="node4" class="node">
|
<g id="node4" class="node">
|
||||||
<title>_ferrule_crimp_4</title>
|
<title>AUTOGENERATED_F_4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-117 0,-117 0,-94 89,-94 89,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-117 0,-117 0,-94 89,-94 89,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_4--W1 -->
|
<!-- AUTOGENERATED_F_4--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_ferrule_crimp_4:e--W1:w</title>
|
<title>AUTOGENERATED_F_4:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-103.5C154.34,-103.86 169.96,-114.86 233,-114.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-103.5C154.34,-103.86 169.96,-114.86 233,-114.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M89,-105.5C153.19,-105.5 168.81,-116.5 233,-116.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M89,-105.5C153.19,-105.5 168.81,-116.5 233,-116.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-107.5C152.04,-107.14 167.66,-118.14 233,-118.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-107.5C152.04,-107.14 167.66,-118.14 233,-118.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_5 -->
|
<!-- AUTOGENERATED_F_5 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
<title>_ferrule_crimp_5</title>
|
<title>AUTOGENERATED_F_5</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-70 0,-70 0,-47 89,-47 89,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-70 0,-70 0,-47 89,-47 89,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_5--W1 -->
|
<!-- AUTOGENERATED_F_5--W1 -->
|
||||||
<g id="edge9" class="edge">
|
<g id="edge9" class="edge">
|
||||||
<title>_ferrule_crimp_5:e--W1:w</title>
|
<title>AUTOGENERATED_F_5:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-56.5C156.53,-57.78 169.21,-90.78 233,-89.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-56.5C156.53,-57.78 169.21,-90.78 233,-89.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M89,-58.5C154.66,-58.5 167.34,-91.5 233,-91.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M89,-58.5C154.66,-58.5 167.34,-91.5 233,-91.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-60.5C152.79,-59.22 165.47,-92.22 233,-93.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-60.5C152.79,-59.22 165.47,-92.22 233,-93.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_6 -->
|
<!-- AUTOGENERATED_F_6 -->
|
||||||
<g id="node6" class="node">
|
<g id="node6" class="node">
|
||||||
<title>_ferrule_crimp_6</title>
|
<title>AUTOGENERATED_F_6</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-23 0,-23 0,0 89,0 89,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-23 0,-23 0,0 89,0 89,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_6--W1 -->
|
<!-- AUTOGENERATED_F_6--W1 -->
|
||||||
<g id="edge11" class="edge">
|
<g id="edge11" class="edge">
|
||||||
<title>_ferrule_crimp_6:e--W1:w</title>
|
<title>AUTOGENERATED_F_6:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-9.5C159.49,-11.25 166.47,-66.25 233,-64.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-9.5C159.49,-11.25 166.47,-66.25 233,-64.5"/>
|
||||||
<path fill="none" stroke="#0066ff" stroke-width="2" d="M89,-11.5C157.51,-11.5 164.49,-66.5 233,-66.5"/>
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M89,-11.5C157.51,-11.5 164.49,-66.5 233,-66.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-13.5C155.53,-11.75 162.51,-66.75 233,-68.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-13.5C155.53,-11.75 162.51,-66.75 233,-68.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_7 -->
|
<!-- AUTOGENERATED_F_7 -->
|
||||||
<g id="node7" class="node">
|
<g id="node7" class="node">
|
||||||
<title>_ferrule_crimp_7</title>
|
<title>AUTOGENERATED_F_7</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-258 576,-258 576,-235 665,-235 665,-258"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-258 576,-258 576,-235 665,-235 665,-258"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-234.5 576.5,-257.5 665.5,-257.5 665.5,-234.5 576.5,-234.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-234.5 576.5,-257.5 665.5,-257.5 665.5,-234.5 576.5,-234.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_8 -->
|
<!-- AUTOGENERATED_F_8 -->
|
||||||
<g id="node8" class="node">
|
<g id="node8" class="node">
|
||||||
<title>_ferrule_crimp_8</title>
|
<title>AUTOGENERATED_F_8</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-211 576,-211 576,-188 665,-188 665,-211"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-211 576,-211 576,-188 665,-188 665,-211"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-187.5 576.5,-210.5 665.5,-210.5 665.5,-187.5 576.5,-187.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-187.5 576.5,-210.5 665.5,-210.5 665.5,-187.5 576.5,-187.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_9 -->
|
<!-- AUTOGENERATED_F_9 -->
|
||||||
<g id="node9" class="node">
|
<g id="node9" class="node">
|
||||||
<title>_ferrule_crimp_9</title>
|
<title>AUTOGENERATED_F_9</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-164 576,-164 576,-141 665,-141 665,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-164 576,-164 576,-141 665,-141 665,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-140.5 576.5,-163.5 665.5,-163.5 665.5,-140.5 576.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-140.5 576.5,-163.5 665.5,-163.5 665.5,-140.5 576.5,-140.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_10 -->
|
<!-- AUTOGENERATED_F_10 -->
|
||||||
<g id="node10" class="node">
|
<g id="node10" class="node">
|
||||||
<title>_ferrule_crimp_10</title>
|
<title>AUTOGENERATED_F_10</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-117 576,-117 576,-94 665,-94 665,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-117 576,-117 576,-94 665,-94 665,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-93.5 576.5,-116.5 665.5,-116.5 665.5,-93.5 576.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-93.5 576.5,-116.5 665.5,-116.5 665.5,-93.5 576.5,-93.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_11 -->
|
<!-- AUTOGENERATED_F_11 -->
|
||||||
<g id="node11" class="node">
|
<g id="node11" class="node">
|
||||||
<title>_ferrule_crimp_11</title>
|
<title>AUTOGENERATED_F_11</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-70 576,-70 576,-47 665,-47 665,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-70 576,-70 576,-47 665,-47 665,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-46.5 576.5,-69.5 665.5,-69.5 665.5,-46.5 576.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-46.5 576.5,-69.5 665.5,-69.5 665.5,-46.5 576.5,-46.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_12 -->
|
<!-- AUTOGENERATED_F_12 -->
|
||||||
<g id="node12" class="node">
|
<g id="node12" class="node">
|
||||||
<title>_ferrule_crimp_12</title>
|
<title>AUTOGENERATED_F_12</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-23 576,-23 576,0 665,0 665,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-23 576,-23 576,0 665,0 665,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,0.5 576.5,-22.5 665.5,-22.5 665.5,0.5 576.5,0.5"/>
|
<polygon fill="none" stroke="black" points="576.5,0.5 576.5,-22.5 665.5,-22.5 665.5,0.5 576.5,0.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_7 -->
|
<!-- W1--AUTOGENERATED_F_7 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_7:w</title>
|
<title>W1:e--AUTOGENERATED_F_7:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-189.5C502.49,-191.25 509.47,-246.25 576,-244.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-189.5C502.49,-191.25 509.47,-246.25 576,-244.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M432,-191.5C500.51,-191.5 507.49,-246.5 576,-246.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M432,-191.5C500.51,-191.5 507.49,-246.5 576,-246.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-193.5C498.53,-191.75 505.51,-246.75 576,-248.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-193.5C498.53,-191.75 505.51,-246.75 576,-248.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_8 -->
|
<!-- W1--AUTOGENERATED_F_8 -->
|
||||||
<g id="edge4" class="edge">
|
<g id="edge4" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_8:w</title>
|
<title>W1:e--AUTOGENERATED_F_8:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-164.5C499.53,-165.78 512.21,-198.78 576,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-164.5C499.53,-165.78 512.21,-198.78 576,-197.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M432,-166.5C497.66,-166.5 510.34,-199.5 576,-199.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M432,-166.5C497.66,-166.5 510.34,-199.5 576,-199.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-168.5C495.79,-167.22 508.47,-200.22 576,-201.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-168.5C495.79,-167.22 508.47,-200.22 576,-201.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_9 -->
|
<!-- W1--AUTOGENERATED_F_9 -->
|
||||||
<g id="edge6" class="edge">
|
<g id="edge6" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_9:w</title>
|
<title>W1:e--AUTOGENERATED_F_9:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-139.5C497.34,-139.86 512.96,-150.86 576,-150.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-139.5C497.34,-139.86 512.96,-150.86 576,-150.5"/>
|
||||||
<path fill="none" stroke="#ff8000" stroke-width="2" d="M432,-141.5C496.19,-141.5 511.81,-152.5 576,-152.5"/>
|
<path fill="none" stroke="#ff8000" stroke-width="2" d="M432,-141.5C496.19,-141.5 511.81,-152.5 576,-152.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-143.5C495.04,-143.14 510.66,-154.14 576,-154.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-143.5C495.04,-143.14 510.66,-154.14 576,-154.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_10 -->
|
<!-- W1--AUTOGENERATED_F_10 -->
|
||||||
<g id="edge8" class="edge">
|
<g id="edge8" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_10:w</title>
|
<title>W1:e--AUTOGENERATED_F_10:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-114.5C495.04,-114.86 510.66,-103.86 576,-103.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-114.5C495.04,-114.86 510.66,-103.86 576,-103.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M432,-116.5C496.19,-116.5 511.81,-105.5 576,-105.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M432,-116.5C496.19,-116.5 511.81,-105.5 576,-105.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-118.5C497.34,-118.14 512.96,-107.14 576,-107.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-118.5C497.34,-118.14 512.96,-107.14 576,-107.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_11 -->
|
<!-- W1--AUTOGENERATED_F_11 -->
|
||||||
<g id="edge10" class="edge">
|
<g id="edge10" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_11:w</title>
|
<title>W1:e--AUTOGENERATED_F_11:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-89.5C495.79,-90.78 508.47,-57.78 576,-56.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-89.5C495.79,-90.78 508.47,-57.78 576,-56.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M432,-91.5C497.66,-91.5 510.34,-58.5 576,-58.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M432,-91.5C497.66,-91.5 510.34,-58.5 576,-58.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-93.5C499.53,-92.22 512.21,-59.22 576,-60.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-93.5C499.53,-92.22 512.21,-59.22 576,-60.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_12 -->
|
<!-- W1--AUTOGENERATED_F_12 -->
|
||||||
<g id="edge12" class="edge">
|
<g id="edge12" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_12:w</title>
|
<title>W1:e--AUTOGENERATED_F_12:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-64.5C498.53,-66.25 505.51,-11.25 576,-9.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-64.5C498.53,-66.25 505.51,-11.25 576,-9.5"/>
|
||||||
<path fill="none" stroke="#0066ff" stroke-width="2" d="M432,-66.5C500.51,-66.5 507.49,-11.5 576,-11.5"/>
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M432,-66.5C500.51,-66.5 507.49,-11.5 576,-11.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-68.5C502.49,-66.75 509.47,-11.75 576,-13.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-68.5C502.49,-66.75 509.47,-11.75 576,-13.5"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Crimp ferrule</td>
|
<td class="bom_col_description">Connector, Crimp ferrule</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">12</td>
|
<td class="bom_col_qty">12</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_designators"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², BN</td>
|
<td class="bom_col_description">Wire, 0.25 mm², BN</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², BU</td>
|
<td class="bom_col_description">Wire, 0.25 mm², BU</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², GN</td>
|
<td class="bom_col_description">Wire, 0.25 mm², GN</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², OG</td>
|
<td class="bom_col_description">Wire, 0.25 mm², OG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">6</td>
|
<td class="bom_col_id">6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², RD</td>
|
<td class="bom_col_description">Wire, 0.25 mm², RD</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">7</td>
|
<td class="bom_col_id">7</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.25 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
98
examples/ex04.svg
generated
@ -1,16 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="673pt" height="287pt"
|
<svg width="673pt" height="287pt"
|
||||||
viewBox="0.00 0.00 673.00 286.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 673.00 286.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 282.5)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 282.5)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-282.5 669,-282.5 669,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-282.5 669,-282.5 669,4 -4,4"/>
|
||||||
<!-- _ferrule_crimp_1 -->
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>_ferrule_crimp_1</title>
|
<title>AUTOGENERATED_F_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-258 0,-258 0,-235 89,-235 89,-258"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-258 0,-258 0,-235 89,-235 89,-258"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-234.5 0.5,-257.5 89.5,-257.5 89.5,-234.5 0.5,-234.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-234.5 0.5,-257.5 89.5,-257.5 89.5,-234.5 0.5,-234.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -54,163 +54,163 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="233.5,-63.5 233.5,-65.5 432.5,-65.5 432.5,-63.5 233.5,-63.5"/>
|
<polygon fill="#000000" stroke="transparent" points="233.5,-63.5 233.5,-65.5 432.5,-65.5 432.5,-63.5 233.5,-63.5"/>
|
||||||
<text text-anchor="start" x="256.5" y="-50.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="256.5" y="-50.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_1--W1 -->
|
<!-- AUTOGENERATED_F_1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_ferrule_crimp_1:e--W1:w</title>
|
<title>AUTOGENERATED_F_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-244.5C155.53,-246.25 162.51,-191.25 233,-189.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-244.5C155.53,-246.25 162.51,-191.25 233,-189.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M89,-246.5C157.51,-246.5 164.49,-191.5 233,-191.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M89,-246.5C157.51,-246.5 164.49,-191.5 233,-191.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-248.5C159.49,-246.75 166.47,-191.75 233,-193.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-248.5C159.49,-246.75 166.47,-191.75 233,-193.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2 -->
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_ferrule_crimp_2</title>
|
<title>AUTOGENERATED_F_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-211 0,-211 0,-188 89,-188 89,-211"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-211 0,-211 0,-188 89,-188 89,-211"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-187.5 0.5,-210.5 89.5,-210.5 89.5,-187.5 0.5,-187.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-187.5 0.5,-210.5 89.5,-210.5 89.5,-187.5 0.5,-187.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_2--W1 -->
|
<!-- AUTOGENERATED_F_2--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>_ferrule_crimp_2:e--W1:w</title>
|
<title>AUTOGENERATED_F_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-197.5C152.79,-198.78 165.47,-165.78 233,-164.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-197.5C152.79,-198.78 165.47,-165.78 233,-164.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M89,-199.5C154.66,-199.5 167.34,-166.5 233,-166.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M89,-199.5C154.66,-199.5 167.34,-166.5 233,-166.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-201.5C156.53,-200.22 169.21,-167.22 233,-168.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-201.5C156.53,-200.22 169.21,-167.22 233,-168.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_3 -->
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>_ferrule_crimp_3</title>
|
<title>AUTOGENERATED_F_3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-164 0,-164 0,-141 89,-141 89,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-164 0,-164 0,-141 89,-141 89,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_3--W1 -->
|
<!-- AUTOGENERATED_F_3--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>_ferrule_crimp_3:e--W1:w</title>
|
<title>AUTOGENERATED_F_3:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-150.5C152.04,-150.86 167.66,-139.86 233,-139.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-150.5C152.04,-150.86 167.66,-139.86 233,-139.5"/>
|
||||||
<path fill="none" stroke="#ff8000" stroke-width="2" d="M89,-152.5C153.19,-152.5 168.81,-141.5 233,-141.5"/>
|
<path fill="none" stroke="#ff8000" stroke-width="2" d="M89,-152.5C153.19,-152.5 168.81,-141.5 233,-141.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-154.5C154.34,-154.14 169.96,-143.14 233,-143.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-154.5C154.34,-154.14 169.96,-143.14 233,-143.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_4 -->
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
<g id="node4" class="node">
|
<g id="node4" class="node">
|
||||||
<title>_ferrule_crimp_4</title>
|
<title>AUTOGENERATED_F_4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-117 0,-117 0,-94 89,-94 89,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-117 0,-117 0,-94 89,-94 89,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_4--W1 -->
|
<!-- AUTOGENERATED_F_4--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_ferrule_crimp_4:e--W1:w</title>
|
<title>AUTOGENERATED_F_4:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-103.5C154.34,-103.86 169.96,-114.86 233,-114.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-103.5C154.34,-103.86 169.96,-114.86 233,-114.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M89,-105.5C153.19,-105.5 168.81,-116.5 233,-116.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M89,-105.5C153.19,-105.5 168.81,-116.5 233,-116.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-107.5C152.04,-107.14 167.66,-118.14 233,-118.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-107.5C152.04,-107.14 167.66,-118.14 233,-118.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_5 -->
|
<!-- AUTOGENERATED_F_5 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
<title>_ferrule_crimp_5</title>
|
<title>AUTOGENERATED_F_5</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-70 0,-70 0,-47 89,-47 89,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-70 0,-70 0,-47 89,-47 89,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_5--W1 -->
|
<!-- AUTOGENERATED_F_5--W1 -->
|
||||||
<g id="edge9" class="edge">
|
<g id="edge9" class="edge">
|
||||||
<title>_ferrule_crimp_5:e--W1:w</title>
|
<title>AUTOGENERATED_F_5:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-56.5C156.53,-57.78 169.21,-90.78 233,-89.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-56.5C156.53,-57.78 169.21,-90.78 233,-89.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M89,-58.5C154.66,-58.5 167.34,-91.5 233,-91.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M89,-58.5C154.66,-58.5 167.34,-91.5 233,-91.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-60.5C152.79,-59.22 165.47,-92.22 233,-93.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-60.5C152.79,-59.22 165.47,-92.22 233,-93.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_6 -->
|
<!-- AUTOGENERATED_F_6 -->
|
||||||
<g id="node6" class="node">
|
<g id="node6" class="node">
|
||||||
<title>_ferrule_crimp_6</title>
|
<title>AUTOGENERATED_F_6</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="89,-23 0,-23 0,0 89,0 89,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="89,-23 0,-23 0,0 89,0 89,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_6--W1 -->
|
<!-- AUTOGENERATED_F_6--W1 -->
|
||||||
<g id="edge11" class="edge">
|
<g id="edge11" class="edge">
|
||||||
<title>_ferrule_crimp_6:e--W1:w</title>
|
<title>AUTOGENERATED_F_6:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-9.5C159.49,-11.25 166.47,-66.25 233,-64.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-9.5C159.49,-11.25 166.47,-66.25 233,-64.5"/>
|
||||||
<path fill="none" stroke="#0066ff" stroke-width="2" d="M89,-11.5C157.51,-11.5 164.49,-66.5 233,-66.5"/>
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M89,-11.5C157.51,-11.5 164.49,-66.5 233,-66.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-13.5C155.53,-11.75 162.51,-66.75 233,-68.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M89,-13.5C155.53,-11.75 162.51,-66.75 233,-68.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_7 -->
|
<!-- AUTOGENERATED_F_7 -->
|
||||||
<g id="node7" class="node">
|
<g id="node7" class="node">
|
||||||
<title>_ferrule_crimp_7</title>
|
<title>AUTOGENERATED_F_7</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-258 576,-258 576,-235 665,-235 665,-258"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-258 576,-258 576,-235 665,-235 665,-258"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-234.5 576.5,-257.5 665.5,-257.5 665.5,-234.5 576.5,-234.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-234.5 576.5,-257.5 665.5,-257.5 665.5,-234.5 576.5,-234.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-242.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_8 -->
|
<!-- AUTOGENERATED_F_8 -->
|
||||||
<g id="node8" class="node">
|
<g id="node8" class="node">
|
||||||
<title>_ferrule_crimp_8</title>
|
<title>AUTOGENERATED_F_8</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-211 576,-211 576,-188 665,-188 665,-211"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-211 576,-211 576,-188 665,-188 665,-211"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-187.5 576.5,-210.5 665.5,-210.5 665.5,-187.5 576.5,-187.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-187.5 576.5,-210.5 665.5,-210.5 665.5,-187.5 576.5,-187.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-195.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_9 -->
|
<!-- AUTOGENERATED_F_9 -->
|
||||||
<g id="node9" class="node">
|
<g id="node9" class="node">
|
||||||
<title>_ferrule_crimp_9</title>
|
<title>AUTOGENERATED_F_9</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-164 576,-164 576,-141 665,-141 665,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-164 576,-164 576,-141 665,-141 665,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-140.5 576.5,-163.5 665.5,-163.5 665.5,-140.5 576.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-140.5 576.5,-163.5 665.5,-163.5 665.5,-140.5 576.5,-140.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_10 -->
|
<!-- AUTOGENERATED_F_10 -->
|
||||||
<g id="node10" class="node">
|
<g id="node10" class="node">
|
||||||
<title>_ferrule_crimp_10</title>
|
<title>AUTOGENERATED_F_10</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-117 576,-117 576,-94 665,-94 665,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-117 576,-117 576,-94 665,-94 665,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-93.5 576.5,-116.5 665.5,-116.5 665.5,-93.5 576.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-93.5 576.5,-116.5 665.5,-116.5 665.5,-93.5 576.5,-93.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_11 -->
|
<!-- AUTOGENERATED_F_11 -->
|
||||||
<g id="node11" class="node">
|
<g id="node11" class="node">
|
||||||
<title>_ferrule_crimp_11</title>
|
<title>AUTOGENERATED_F_11</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-70 576,-70 576,-47 665,-47 665,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-70 576,-70 576,-47 665,-47 665,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,-46.5 576.5,-69.5 665.5,-69.5 665.5,-46.5 576.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="576.5,-46.5 576.5,-69.5 665.5,-69.5 665.5,-46.5 576.5,-46.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _ferrule_crimp_12 -->
|
<!-- AUTOGENERATED_F_12 -->
|
||||||
<g id="node12" class="node">
|
<g id="node12" class="node">
|
||||||
<title>_ferrule_crimp_12</title>
|
<title>AUTOGENERATED_F_12</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="665,-23 576,-23 576,0 665,0 665,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="665,-23 576,-23 576,0 665,0 665,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="576.5,0.5 576.5,-22.5 665.5,-22.5 665.5,0.5 576.5,0.5"/>
|
<polygon fill="none" stroke="black" points="576.5,0.5 576.5,-22.5 665.5,-22.5 665.5,0.5 576.5,0.5"/>
|
||||||
<text text-anchor="start" x="580.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="580.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_7 -->
|
<!-- W1--AUTOGENERATED_F_7 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_7:w</title>
|
<title>W1:e--AUTOGENERATED_F_7:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-189.5C502.49,-191.25 509.47,-246.25 576,-244.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-189.5C502.49,-191.25 509.47,-246.25 576,-244.5"/>
|
||||||
<path fill="none" stroke="#895956" stroke-width="2" d="M432,-191.5C500.51,-191.5 507.49,-246.5 576,-246.5"/>
|
<path fill="none" stroke="#895956" stroke-width="2" d="M432,-191.5C500.51,-191.5 507.49,-246.5 576,-246.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-193.5C498.53,-191.75 505.51,-246.75 576,-248.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-193.5C498.53,-191.75 505.51,-246.75 576,-248.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_8 -->
|
<!-- W1--AUTOGENERATED_F_8 -->
|
||||||
<g id="edge4" class="edge">
|
<g id="edge4" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_8:w</title>
|
<title>W1:e--AUTOGENERATED_F_8:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-164.5C499.53,-165.78 512.21,-198.78 576,-197.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-164.5C499.53,-165.78 512.21,-198.78 576,-197.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M432,-166.5C497.66,-166.5 510.34,-199.5 576,-199.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M432,-166.5C497.66,-166.5 510.34,-199.5 576,-199.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-168.5C495.79,-167.22 508.47,-200.22 576,-201.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-168.5C495.79,-167.22 508.47,-200.22 576,-201.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_9 -->
|
<!-- W1--AUTOGENERATED_F_9 -->
|
||||||
<g id="edge6" class="edge">
|
<g id="edge6" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_9:w</title>
|
<title>W1:e--AUTOGENERATED_F_9:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-139.5C497.34,-139.86 512.96,-150.86 576,-150.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-139.5C497.34,-139.86 512.96,-150.86 576,-150.5"/>
|
||||||
<path fill="none" stroke="#ff8000" stroke-width="2" d="M432,-141.5C496.19,-141.5 511.81,-152.5 576,-152.5"/>
|
<path fill="none" stroke="#ff8000" stroke-width="2" d="M432,-141.5C496.19,-141.5 511.81,-152.5 576,-152.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-143.5C495.04,-143.14 510.66,-154.14 576,-154.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-143.5C495.04,-143.14 510.66,-154.14 576,-154.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_10 -->
|
<!-- W1--AUTOGENERATED_F_10 -->
|
||||||
<g id="edge8" class="edge">
|
<g id="edge8" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_10:w</title>
|
<title>W1:e--AUTOGENERATED_F_10:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-114.5C495.04,-114.86 510.66,-103.86 576,-103.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-114.5C495.04,-114.86 510.66,-103.86 576,-103.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M432,-116.5C496.19,-116.5 511.81,-105.5 576,-105.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M432,-116.5C496.19,-116.5 511.81,-105.5 576,-105.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-118.5C497.34,-118.14 512.96,-107.14 576,-107.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-118.5C497.34,-118.14 512.96,-107.14 576,-107.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_11 -->
|
<!-- W1--AUTOGENERATED_F_11 -->
|
||||||
<g id="edge10" class="edge">
|
<g id="edge10" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_11:w</title>
|
<title>W1:e--AUTOGENERATED_F_11:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-89.5C495.79,-90.78 508.47,-57.78 576,-56.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-89.5C495.79,-90.78 508.47,-57.78 576,-56.5"/>
|
||||||
<path fill="none" stroke="#00ff00" stroke-width="2" d="M432,-91.5C497.66,-91.5 510.34,-58.5 576,-58.5"/>
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M432,-91.5C497.66,-91.5 510.34,-58.5 576,-58.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-93.5C499.53,-92.22 512.21,-59.22 576,-60.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-93.5C499.53,-92.22 512.21,-59.22 576,-60.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- W1--_ferrule_crimp_12 -->
|
<!-- W1--AUTOGENERATED_F_12 -->
|
||||||
<g id="edge12" class="edge">
|
<g id="edge12" class="edge">
|
||||||
<title>W1:e--_ferrule_crimp_12:w</title>
|
<title>W1:e--AUTOGENERATED_F_12:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-64.5C498.53,-66.25 505.51,-11.25 576,-9.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-64.5C498.53,-66.25 505.51,-11.25 576,-9.5"/>
|
||||||
<path fill="none" stroke="#0066ff" stroke-width="2" d="M432,-66.5C500.51,-66.5 507.49,-11.5 576,-11.5"/>
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M432,-66.5C500.51,-66.5 507.49,-11.5 576,-11.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-68.5C502.49,-66.75 509.47,-11.75 576,-13.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M432,-68.5C502.49,-66.75 509.47,-11.75 576,-13.5"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
103
examples/ex05.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex05</title>
|
<title>ex05</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex05</h1>
|
<h1>ex05</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1535pt" height="192pt"
|
<svg width="1535pt" height="192pt"
|
||||||
@ -305,49 +328,61 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, <a href="https://www.molex.com/molex/products/family/kk_254_rpc_connector_system">Molex KK 254</a>, female, 4 pins</td>
|
<td class="bom_col_description">Connector, <a href="https://www.molex.com/molex/products/family/kk_254_rpc_connector_system">Molex KK 254</a>, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">3</td>
|
<td class="bom_col_qty">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2, X3</td>
|
<td class="bom_col_designators">X1, X2, X3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, I2C, 0.25 mm², PK</td>
|
<td class="bom_col_description">Wire, I2C, 0.25 mm², PK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, I2C, 0.25 mm², TQ</td>
|
<td class="bom_col_description">Wire, I2C, 0.25 mm², TQ</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, I2C, 0.25 mm², VT</td>
|
<td class="bom_col_description">Wire, I2C, 0.25 mm², VT</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, I2C, 0.25 mm², YE</td>
|
<td class="bom_col_description">Wire, I2C, 0.25 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex05.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1535pt" height="192pt"
|
<svg width="1535pt" height="192pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
103
examples/ex06.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex06</title>
|
<title>ex06</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex06</h1>
|
<h1>ex06</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="865pt" height="1024pt"
|
<svg width="865pt" height="1024pt"
|
||||||
@ -665,49 +688,61 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">6</td>
|
<td class="bom_col_qty">6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2, X3, X4, X5, X6</td>
|
<td class="bom_col_designators">X1, X2, X3, X4, X5, X6</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², PK</td>
|
<td class="bom_col_description">Wire, 0.25 mm², PK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², TQ</td>
|
<td class="bom_col_description">Wire, 0.25 mm², TQ</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², VT</td>
|
<td class="bom_col_description">Wire, 0.25 mm², VT</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.25 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex06.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="865pt" height="1024pt"
|
<svg width="865pt" height="1024pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
83
examples/ex07.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex07</title>
|
<title>ex07</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex07</h1>
|
<h1>ex07</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="858pt" height="153pt"
|
<svg width="858pt" height="153pt"
|
||||||
@ -109,35 +132,47 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 2 x 20 AWG</td>
|
<td class="bom_col_description">Cable, 2 x 20 AWG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">C1</td>
|
<td class="bom_col_designators">C1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, D-Sub, female, 9 pins</td>
|
<td class="bom_col_description">Connector, D-Sub, female, 9 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2</td>
|
<td class="bom_col_designators">X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, TE 776164-1, female, 35 pins</td>
|
<td class="bom_col_description">Connector, TE 776164-1, female, 35 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex07.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="858pt" height="153pt"
|
<svg width="858pt" height="153pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
4
examples/ex08.gv
generated
@ -35,7 +35,7 @@ graph {
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
<td balign="left" sides="TLR"><img scale="false" src="resources/stereo-phone-plug-TRS.png"/></td>
|
<td balign="left" sides="TLR"><img scale="false" src="/Users/daniel/Projects/WireViz/examples/resources/stereo-phone-plug-TRS.png"/></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@ -135,7 +135,7 @@ graph {
|
|||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
<td balign="left" sides="TLR">
|
<td balign="left" sides="TLR">
|
||||||
<table border="0" cellspacing="0" cellborder="0"><tr>
|
<table border="0" cellspacing="0" cellborder="0"><tr>
|
||||||
<td width="70.0" height="70" fixedsize="true"><img scale="true" src="resources/cable-WH+BN+GN+shield.png"/></td>
|
<td width="70.0" height="70" fixedsize="true"><img scale="true" src="/Users/daniel/Projects/WireViz/examples/resources/cable-WH+BN+GN+shield.png"/></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
</td>
|
</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|||||||
77
examples/ex08.html
generated
6
examples/ex08.svg
generated
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 17 KiB |
83
examples/ex09.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex09</title>
|
<title>ex09</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex09</h1>
|
<h1>ex09</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="835pt" height="1158pt"
|
<svg width="835pt" height="1158pt"
|
||||||
@ -528,35 +551,47 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 12 x 0.25 mm² shielded</td>
|
<td class="bom_col_description">Cable, 12 x 0.25 mm² shielded</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.2</td>
|
<td class="bom_col_qty">0.2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, D-Sub, male, 25 pins</td>
|
<td class="bom_col_description">Connector, D-Sub, male, 25 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, F48, female, 48 pins</td>
|
<td class="bom_col_description">Connector, F48, female, 48 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2</td>
|
<td class="bom_col_designators">X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex09.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="835pt" height="1158pt"
|
<svg width="835pt" height="1158pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
73
examples/ex10.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>ex10</title>
|
<title>ex10</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>ex10</h1>
|
<h1>ex10</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1120pt" height="324pt"
|
<svg width="1120pt" height="324pt"
|
||||||
@ -331,28 +354,40 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, CAT5e, 8 x 24 AWG</td>
|
<td class="bom_col_description">Cable, CAT5e, 8 x 24 AWG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Stewart Connector SS-37000-002, male, 8 pins</td>
|
<td class="bom_col_description">Connector, Stewart Connector SS-37000-002, male, 8 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2</td>
|
<td class="bom_col_designators">X1, X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
examples/ex10.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1120pt" height="324pt"
|
<svg width="1120pt" height="324pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
4
examples/ex11.bom.tsv
generated
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Id Description Qty Unit Designators
|
||||||
|
1 Cable, 4 wires, BK 0 m W1
|
||||||
|
2 Connector, Ferrule, GY 4
|
||||||
|
3 Connector, Screw connector, male, 4 pins, GN 1 X1
|
||||||
|
191
examples/ex11.gv
generated
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
graph {
|
||||||
|
// Graph generated by WireViz 0.4-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]
|
||||||
|
AUTOGENERATED_F_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Screw connector</td>
|
||||||
|
<td balign="left">male</td>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
<td balign="left">GN</td>
|
||||||
|
<td balign="left" bgcolor="#00FF00" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
<td>A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
<td>B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
<td>C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
<td>D</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#000000:#000000"]
|
||||||
|
W1:w1:e -- AUTOGENERATED_F_1:w
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
W1:w2:e -- AUTOGENERATED_F_2:w
|
||||||
|
edge [color="#000000:#0066ff:#000000"]
|
||||||
|
W1:w3:e -- AUTOGENERATED_F_3:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
W1:w4:e -- AUTOGENERATED_F_4:w
|
||||||
|
W1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">BK</td>
|
||||||
|
<td balign="left" bgcolor="#000000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 1_in --></td>
|
||||||
|
<td>
|
||||||
|
1:BK
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 2_in --></td>
|
||||||
|
<td>
|
||||||
|
2:WH
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 3_in --></td>
|
||||||
|
<td>
|
||||||
|
3:BU
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#0066ff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 4_in --></td>
|
||||||
|
<td>
|
||||||
|
4:BN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_1:e -- X1:p1l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_2:e -- X1:p2l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_3:e -- X1:p3l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_4:e -- X1:p4l:w
|
||||||
|
}
|
||||||
245
examples/ex11.html
generated
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
|
<title>ex11</title>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
|
<h1>ex11</h1>
|
||||||
|
<h2>Diagram</h2>
|
||||||
|
|
||||||
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="703pt" height="215pt"
|
||||||
|
viewBox="0.00 0.00 703.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 699,-210.5 699,4 -4,4"/>
|
||||||
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>AUTOGENERATED_F_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-164 231,-164 231,-141 321,-141 321,-164"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-140.5 231,-163.5 284,-163.5 284,-140.5 231,-140.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-148.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-140.5 284,-163.5 313,-163.5 313,-140.5 284,-140.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-148.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-140.5 313,-163.5 321,-163.5 321,-140.5 313,-140.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-140.5 313,-163.5 321,-163.5 321,-140.5 313,-140.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="695,-174.5 465,-174.5 465,-36.5 695,-36.5 695,-174.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-151.5 465,-174.5 695,-174.5 695,-151.5 465,-151.5"/>
|
||||||
|
<text text-anchor="start" x="571" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-128.5 465,-151.5 578,-151.5 578,-128.5 465,-128.5"/>
|
||||||
|
<text text-anchor="start" x="469" y="-136.3" font-family="arial" font-size="14.00">Screw connector</text>
|
||||||
|
<polygon fill="none" stroke="black" points="578,-128.5 578,-151.5 617,-151.5 617,-128.5 578,-128.5"/>
|
||||||
|
<text text-anchor="start" x="582" y="-136.3" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="617,-128.5 617,-151.5 657,-151.5 657,-128.5 617,-128.5"/>
|
||||||
|
<text text-anchor="start" x="621" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="657,-128.5 657,-151.5 687,-151.5 687,-128.5 657,-128.5"/>
|
||||||
|
<text text-anchor="start" x="661" y="-136.3" font-family="arial" font-size="14.00">GN</text>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="687,-128.5 687,-151.5 695,-151.5 695,-128.5 687,-128.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="687,-128.5 687,-151.5 695,-151.5 695,-128.5 687,-128.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-105.5 465,-128.5 579,-128.5 579,-105.5 465,-105.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-105.5 579,-128.5 695,-128.5 695,-105.5 579,-105.5"/>
|
||||||
|
<text text-anchor="start" x="632" y="-113.3" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-82.5 465,-105.5 579,-105.5 579,-82.5 465,-82.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-82.5 579,-105.5 695,-105.5 695,-82.5 579,-82.5"/>
|
||||||
|
<text text-anchor="start" x="632" y="-90.3" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-59.5 465,-82.5 579,-82.5 579,-59.5 465,-59.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-59.5 579,-82.5 695,-82.5 695,-59.5 579,-59.5"/>
|
||||||
|
<text text-anchor="start" x="631.5" y="-67.3" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-36.5 465,-59.5 579,-59.5 579,-36.5 465,-36.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-36.5 579,-59.5 695,-59.5 695,-36.5 579,-36.5"/>
|
||||||
|
<text text-anchor="start" x="631.5" y="-44.3" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1--X1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-152.5C383.26,-152.5 397.63,-121.22 454.66,-117.8"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="455.11,-121.29 465,-117.5 454.9,-114.29 455.11,-121.29"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>AUTOGENERATED_F_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-117 231,-117 231,-94 321,-94 321,-117"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-93.5 231,-116.5 284,-116.5 284,-93.5 231,-93.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-101.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-93.5 284,-116.5 313,-116.5 313,-93.5 284,-93.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-101.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-93.5 313,-116.5 321,-116.5 321,-93.5 313,-93.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-93.5 313,-116.5 321,-116.5 321,-93.5 313,-93.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2--X1 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_2:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-105.5C381.71,-105.5 398.93,-94.78 454.88,-93.6"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="455.04,-97.1 465,-93.5 454.96,-90.1 455.04,-97.1"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_F_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-70 231,-70 231,-47 321,-47 321,-70"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-46.5 231,-69.5 284,-69.5 284,-46.5 231,-46.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-54.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-46.5 284,-69.5 313,-69.5 313,-46.5 284,-46.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-54.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-46.5 313,-69.5 321,-69.5 321,-46.5 313,-46.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-46.5 313,-69.5 321,-69.5 321,-46.5 313,-46.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3--X1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_3:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-58.5C381.71,-58.5 398.93,-69.22 454.88,-70.4"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="454.96,-73.9 465,-70.5 455.04,-66.9 454.96,-73.9"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>AUTOGENERATED_F_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-23 231,-23 231,0 321,0 321,-23"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,0.5 231,-22.5 284,-22.5 284,0.5 231,0.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-7.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,0.5 284,-22.5 313,-22.5 313,0.5 284,0.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-7.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,0.5 313,-22.5 321,-22.5 321,0.5 313,0.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,0.5 313,-22.5 321,-22.5 321,0.5 313,0.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4--X1 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_4:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-11.5C383.49,-11.5 397.61,-43.8 455,-47.21"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="454.9,-50.71 465,-47.5 455.11,-43.71 454.9,-50.71"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="87,-206.5 0,-206.5 0,-22.5 87,-22.5 87,-206.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-183.5 0.5,-206.5 87.5,-206.5 87.5,-183.5 0.5,-183.5"/>
|
||||||
|
<text text-anchor="start" x="33.5" y="-191.3" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-160.5 0.5,-183.5 33.5,-183.5 33.5,-160.5 0.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="9.5" y="-168.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="33.5,-160.5 33.5,-183.5 70.5,-183.5 70.5,-160.5 33.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="42.5" y="-168.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="70.5,-160.5 70.5,-183.5 87.5,-183.5 87.5,-160.5 70.5,-160.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-160.5 70.5,-183.5 87.5,-183.5 87.5,-160.5 70.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="2.5" y="-147.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="13" y="-128.3" font-family="arial" font-size="14.00">     1:BK    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-120.5 0.5,-122.5 87.5,-122.5 87.5,-120.5 0.5,-120.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-118.5 0.5,-120.5 87.5,-120.5 87.5,-118.5 0.5,-118.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-116.5 0.5,-118.5 87.5,-118.5 87.5,-116.5 0.5,-116.5"/>
|
||||||
|
<text text-anchor="start" x="10.5" y="-103.3" font-family="arial" font-size="14.00">     2:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-95.5 0.5,-97.5 87.5,-97.5 87.5,-95.5 0.5,-95.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0.5,-93.5 0.5,-95.5 87.5,-95.5 87.5,-93.5 0.5,-93.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-91.5 0.5,-93.5 87.5,-93.5 87.5,-91.5 0.5,-91.5"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-78.3" font-family="arial" font-size="14.00">     3:BU    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-70.5 0.5,-72.5 87.5,-72.5 87.5,-70.5 0.5,-70.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="0.5,-68.5 0.5,-70.5 87.5,-70.5 87.5,-68.5 0.5,-68.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-66.5 0.5,-68.5 87.5,-68.5 87.5,-66.5 0.5,-66.5"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-53.3" font-family="arial" font-size="14.00">     4:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-45.5 0.5,-47.5 87.5,-47.5 87.5,-45.5 0.5,-45.5"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="0.5,-43.5 0.5,-45.5 87.5,-45.5 87.5,-43.5 0.5,-43.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-41.5 0.5,-43.5 87.5,-43.5 87.5,-41.5 0.5,-41.5"/>
|
||||||
|
<text text-anchor="start" x="2.5" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-117.5C154.53,-118.78 167.21,-151.78 231,-150.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-119.5C152.66,-119.5 165.34,-152.5 231,-152.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-121.5C150.79,-120.22 163.47,-153.22 231,-154.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_2 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-92.5C152.34,-92.86 167.96,-103.86 231,-103.5"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M87,-94.5C151.19,-94.5 166.81,-105.5 231,-105.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-96.5C150.04,-96.14 165.66,-107.14 231,-107.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_3 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-67.5C150.04,-67.86 165.66,-56.86 231,-56.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M87,-69.5C151.19,-69.5 166.81,-58.5 231,-58.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-71.5C152.34,-71.14 167.96,-60.14 231,-60.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_4 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-42.5C150.79,-43.78 163.47,-10.78 231,-9.5"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M87,-44.5C152.66,-44.5 165.34,-11.5 231,-11.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-46.5C154.53,-45.22 167.21,-12.22 231,-13.5"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Bill of Materials</h2>
|
||||||
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
|
<tr>
|
||||||
|
<th class="bom_col_id">Id</th>
|
||||||
|
<th class="bom_col_description">Description</th>
|
||||||
|
<th class="bom_col_qty">Qty</th>
|
||||||
|
<th class="bom_col_unit">Unit</th>
|
||||||
|
<th class="bom_col_designators">Designators</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">1</td>
|
||||||
|
<td class="bom_col_description">Cable, 4 wires, BK</td>
|
||||||
|
<td class="bom_col_qty">0</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">2</td>
|
||||||
|
<td class="bom_col_description">Connector, Ferrule, GY</td>
|
||||||
|
<td class="bom_col_qty">4</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">3</td>
|
||||||
|
<td class="bom_col_description">Connector, Screw connector, male, 4 pins, GN</td>
|
||||||
|
<td class="bom_col_qty">1</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X1</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
BIN
examples/ex11.png
generated
Normal file
|
After Width: | Height: | Size: 37 KiB |
172
examples/ex11.svg
generated
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="703pt" height="215pt"
|
||||||
|
viewBox="0.00 0.00 703.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 699,-210.5 699,4 -4,4"/>
|
||||||
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>AUTOGENERATED_F_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-164 231,-164 231,-141 321,-141 321,-164"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-140.5 231,-163.5 284,-163.5 284,-140.5 231,-140.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-148.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-140.5 284,-163.5 313,-163.5 313,-140.5 284,-140.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-148.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-140.5 313,-163.5 321,-163.5 321,-140.5 313,-140.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-140.5 313,-163.5 321,-163.5 321,-140.5 313,-140.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="695,-174.5 465,-174.5 465,-36.5 695,-36.5 695,-174.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-151.5 465,-174.5 695,-174.5 695,-151.5 465,-151.5"/>
|
||||||
|
<text text-anchor="start" x="571" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-128.5 465,-151.5 578,-151.5 578,-128.5 465,-128.5"/>
|
||||||
|
<text text-anchor="start" x="469" y="-136.3" font-family="arial" font-size="14.00">Screw connector</text>
|
||||||
|
<polygon fill="none" stroke="black" points="578,-128.5 578,-151.5 617,-151.5 617,-128.5 578,-128.5"/>
|
||||||
|
<text text-anchor="start" x="582" y="-136.3" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="617,-128.5 617,-151.5 657,-151.5 657,-128.5 617,-128.5"/>
|
||||||
|
<text text-anchor="start" x="621" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="657,-128.5 657,-151.5 687,-151.5 687,-128.5 657,-128.5"/>
|
||||||
|
<text text-anchor="start" x="661" y="-136.3" font-family="arial" font-size="14.00">GN</text>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="687,-128.5 687,-151.5 695,-151.5 695,-128.5 687,-128.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="687,-128.5 687,-151.5 695,-151.5 695,-128.5 687,-128.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-105.5 465,-128.5 579,-128.5 579,-105.5 465,-105.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-105.5 579,-128.5 695,-128.5 695,-105.5 579,-105.5"/>
|
||||||
|
<text text-anchor="start" x="632" y="-113.3" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-82.5 465,-105.5 579,-105.5 579,-82.5 465,-82.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-82.5 579,-105.5 695,-105.5 695,-82.5 579,-82.5"/>
|
||||||
|
<text text-anchor="start" x="632" y="-90.3" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-59.5 465,-82.5 579,-82.5 579,-59.5 465,-59.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-59.5 579,-82.5 695,-82.5 695,-59.5 579,-59.5"/>
|
||||||
|
<text text-anchor="start" x="631.5" y="-67.3" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="465,-36.5 465,-59.5 579,-59.5 579,-36.5 465,-36.5"/>
|
||||||
|
<text text-anchor="start" x="518" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="579,-36.5 579,-59.5 695,-59.5 695,-36.5 579,-36.5"/>
|
||||||
|
<text text-anchor="start" x="631.5" y="-44.3" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1--X1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-152.5C383.26,-152.5 397.63,-121.22 454.66,-117.8"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="455.11,-121.29 465,-117.5 454.9,-114.29 455.11,-121.29"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>AUTOGENERATED_F_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-117 231,-117 231,-94 321,-94 321,-117"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-93.5 231,-116.5 284,-116.5 284,-93.5 231,-93.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-101.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-93.5 284,-116.5 313,-116.5 313,-93.5 284,-93.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-101.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-93.5 313,-116.5 321,-116.5 321,-93.5 313,-93.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-93.5 313,-116.5 321,-116.5 321,-93.5 313,-93.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2--X1 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_2:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-105.5C381.71,-105.5 398.93,-94.78 454.88,-93.6"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="455.04,-97.1 465,-93.5 454.96,-90.1 455.04,-97.1"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_F_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-70 231,-70 231,-47 321,-47 321,-70"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,-46.5 231,-69.5 284,-69.5 284,-46.5 231,-46.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-54.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,-46.5 284,-69.5 313,-69.5 313,-46.5 284,-46.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-54.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,-46.5 313,-69.5 321,-69.5 321,-46.5 313,-46.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,-46.5 313,-69.5 321,-69.5 321,-46.5 313,-46.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3--X1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_3:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-58.5C381.71,-58.5 398.93,-69.22 454.88,-70.4"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="454.96,-73.9 465,-70.5 455.04,-66.9 454.96,-73.9"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>AUTOGENERATED_F_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="321,-23 231,-23 231,0 321,0 321,-23"/>
|
||||||
|
<polygon fill="none" stroke="black" points="231,0.5 231,-22.5 284,-22.5 284,0.5 231,0.5"/>
|
||||||
|
<text text-anchor="start" x="235" y="-7.3" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="284,0.5 284,-22.5 313,-22.5 313,0.5 284,0.5"/>
|
||||||
|
<text text-anchor="start" x="288" y="-7.3" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="313,0.5 313,-22.5 321,-22.5 321,0.5 313,0.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="313,0.5 313,-22.5 321,-22.5 321,0.5 313,0.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4--X1 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_4:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M321,-11.5C383.49,-11.5 397.61,-43.8 455,-47.21"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="454.9,-50.71 465,-47.5 455.11,-43.71 454.9,-50.71"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="87,-206.5 0,-206.5 0,-22.5 87,-22.5 87,-206.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-183.5 0.5,-206.5 87.5,-206.5 87.5,-183.5 0.5,-183.5"/>
|
||||||
|
<text text-anchor="start" x="33.5" y="-191.3" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-160.5 0.5,-183.5 33.5,-183.5 33.5,-160.5 0.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="9.5" y="-168.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="33.5,-160.5 33.5,-183.5 70.5,-183.5 70.5,-160.5 33.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="42.5" y="-168.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="70.5,-160.5 70.5,-183.5 87.5,-183.5 87.5,-160.5 70.5,-160.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-160.5 70.5,-183.5 87.5,-183.5 87.5,-160.5 70.5,-160.5"/>
|
||||||
|
<text text-anchor="start" x="2.5" y="-147.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="13" y="-128.3" font-family="arial" font-size="14.00">     1:BK    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-120.5 0.5,-122.5 87.5,-122.5 87.5,-120.5 0.5,-120.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-118.5 0.5,-120.5 87.5,-120.5 87.5,-118.5 0.5,-118.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-116.5 0.5,-118.5 87.5,-118.5 87.5,-116.5 0.5,-116.5"/>
|
||||||
|
<text text-anchor="start" x="10.5" y="-103.3" font-family="arial" font-size="14.00">     2:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-95.5 0.5,-97.5 87.5,-97.5 87.5,-95.5 0.5,-95.5"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="0.5,-93.5 0.5,-95.5 87.5,-95.5 87.5,-93.5 0.5,-93.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-91.5 0.5,-93.5 87.5,-93.5 87.5,-91.5 0.5,-91.5"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-78.3" font-family="arial" font-size="14.00">     3:BU    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-70.5 0.5,-72.5 87.5,-72.5 87.5,-70.5 0.5,-70.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="0.5,-68.5 0.5,-70.5 87.5,-70.5 87.5,-68.5 0.5,-68.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-66.5 0.5,-68.5 87.5,-68.5 87.5,-66.5 0.5,-66.5"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-53.3" font-family="arial" font-size="14.00">     4:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-45.5 0.5,-47.5 87.5,-47.5 87.5,-45.5 0.5,-45.5"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="0.5,-43.5 0.5,-45.5 87.5,-45.5 87.5,-43.5 0.5,-43.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0.5,-41.5 0.5,-43.5 87.5,-43.5 87.5,-41.5 0.5,-41.5"/>
|
||||||
|
<text text-anchor="start" x="2.5" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-117.5C154.53,-118.78 167.21,-151.78 231,-150.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-119.5C152.66,-119.5 165.34,-152.5 231,-152.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-121.5C150.79,-120.22 163.47,-153.22 231,-154.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_2 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-92.5C152.34,-92.86 167.96,-103.86 231,-103.5"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M87,-94.5C151.19,-94.5 166.81,-105.5 231,-105.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-96.5C150.04,-96.14 165.66,-107.14 231,-107.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_3 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-67.5C150.04,-67.86 165.66,-56.86 231,-56.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M87,-69.5C151.19,-69.5 166.81,-58.5 231,-58.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-71.5C152.34,-71.14 167.96,-60.14 231,-60.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_F_4 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_F_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-42.5C150.79,-43.78 163.47,-10.78 231,-9.5"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M87,-44.5C152.66,-44.5 165.34,-11.5 231,-11.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M87,-46.5C154.53,-45.22 167.21,-12.22 231,-13.5"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
7
examples/ex12.bom.tsv
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Id Description Qty Unit Designators
|
||||||
|
1 Connector, Dupont 2.54mm, female, 5 pins, BK 1 X2
|
||||||
|
2 Connector, Dupont 2.54mm, male, 5 pins, BK 1 X1
|
||||||
|
3 Wire, BK 0.4 m W1, W2
|
||||||
|
4 Wire, BU 0.4 m W1, W2
|
||||||
|
5 Wire, GN 0.4 m W1, W2
|
||||||
|
6 Wire, RD 0.4 m W1, W2
|
||||||
|
269
examples/ex12.gv
generated
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
graph {
|
||||||
|
// Graph generated by WireViz 0.4-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=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Dupont 2.54mm</td>
|
||||||
|
<td balign="left">male</td>
|
||||||
|
<td balign="left">5-pin</td>
|
||||||
|
<td balign="left">BK</td>
|
||||||
|
<td balign="left" bgcolor="#000000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p5l">5</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Dupont 2.54mm</td>
|
||||||
|
<td balign="left">female</td>
|
||||||
|
<td balign="left">5-pin</td>
|
||||||
|
<td balign="left">BK</td>
|
||||||
|
<td balign="left" bgcolor="#000000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1r">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2r">2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3r">3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4r">4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p5r">5</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
|
W1:w1:e -- X1:p1l:w
|
||||||
|
edge [color="#000000:#000000:#000000"]
|
||||||
|
W1:w2:e -- X1:p2l:w
|
||||||
|
edge [color="#000000:#0066ff:#000000"]
|
||||||
|
W1:w3:e -- X1:p3l:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
W1:w4:e -- X1:p4l:w
|
||||||
|
W1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.2 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 1_in --></td>
|
||||||
|
<td>
|
||||||
|
RD
|
||||||
|
</td>
|
||||||
|
<td>X1:1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ff0000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 2_in --></td>
|
||||||
|
<td>
|
||||||
|
BK
|
||||||
|
</td>
|
||||||
|
<td>X1:2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 3_in --></td>
|
||||||
|
<td>
|
||||||
|
BU
|
||||||
|
</td>
|
||||||
|
<td>X1:3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#0066ff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><!-- 4_in --></td>
|
||||||
|
<td>
|
||||||
|
GN
|
||||||
|
</td>
|
||||||
|
<td>X1:4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style="filled,dashed"]
|
||||||
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
|
X2:p1r:e -- W2:w1:w
|
||||||
|
edge [color="#000000:#000000:#000000"]
|
||||||
|
X2:p2r:e -- W2:w2:w
|
||||||
|
edge [color="#000000:#0066ff:#000000"]
|
||||||
|
X2:p3r:e -- W2:w3:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
X2:p4r:e -- W2:w4:w
|
||||||
|
W2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.2 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td>X2:1</td>
|
||||||
|
<td>
|
||||||
|
RD
|
||||||
|
</td>
|
||||||
|
<td><!-- 1_out --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ff0000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X2:2</td>
|
||||||
|
<td>
|
||||||
|
BK
|
||||||
|
</td>
|
||||||
|
<td><!-- 2_out --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X2:3</td>
|
||||||
|
<td>
|
||||||
|
BU
|
||||||
|
</td>
|
||||||
|
<td><!-- 3_out --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#0066ff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X2:4</td>
|
||||||
|
<td>
|
||||||
|
GN
|
||||||
|
</td>
|
||||||
|
<td><!-- 4_out --></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style="filled,dashed"]
|
||||||
|
edge [color="#000000:#000000" dir=forward style=dashed]
|
||||||
|
X1:e -- X2:w
|
||||||
|
}
|
||||||
289
examples/ex12.html
generated
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
|
<title>ex12</title>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
|
<h1>ex12</h1>
|
||||||
|
<h2>Diagram</h2>
|
||||||
|
|
||||||
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="1096pt" height="201pt"
|
||||||
|
viewBox="0.00 0.00 1096.00 200.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 196.5)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-196.5 1092,-196.5 1092,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="468,-161 246,-161 246,0 468,0 468,-161"/>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-137.5 246,-160.5 468,-160.5 468,-137.5 246,-137.5"/>
|
||||||
|
<text text-anchor="start" x="348" y="-145.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-114.5 246,-137.5 354,-137.5 354,-114.5 246,-114.5"/>
|
||||||
|
<text text-anchor="start" x="250" y="-122.3" font-family="arial" font-size="14.00">Dupont 2.54mm</text>
|
||||||
|
<polygon fill="none" stroke="black" points="354,-114.5 354,-137.5 393,-137.5 393,-114.5 354,-114.5"/>
|
||||||
|
<text text-anchor="start" x="358" y="-122.3" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="393,-114.5 393,-137.5 433,-137.5 433,-114.5 393,-114.5"/>
|
||||||
|
<text text-anchor="start" x="397" y="-122.3" font-family="arial" font-size="14.00">5-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="433,-114.5 433,-137.5 460,-137.5 460,-114.5 433,-114.5"/>
|
||||||
|
<text text-anchor="start" x="437" y="-122.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="460,-114.5 460,-137.5 468,-137.5 468,-114.5 460,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="460,-114.5 460,-137.5 468,-137.5 468,-114.5 460,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-91.5 246,-114.5 468,-114.5 468,-91.5 246,-91.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-99.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-68.5 246,-91.5 468,-91.5 468,-68.5 246,-68.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-76.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-45.5 246,-68.5 468,-68.5 468,-45.5 246,-45.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-53.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-22.5 246,-45.5 468,-45.5 468,-22.5 246,-22.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-30.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,0.5 246,-22.5 468,-22.5 468,0.5 246,0.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-7.3" font-family="arial" font-size="14.00">5</text>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="846,-161 612,-161 612,0 846,0 846,-161"/>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-137.5 612,-160.5 846,-160.5 846,-137.5 612,-137.5"/>
|
||||||
|
<text text-anchor="start" x="720" y="-145.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-114.5 612,-137.5 720,-137.5 720,-114.5 612,-114.5"/>
|
||||||
|
<text text-anchor="start" x="616" y="-122.3" font-family="arial" font-size="14.00">Dupont 2.54mm</text>
|
||||||
|
<polygon fill="none" stroke="black" points="720,-114.5 720,-137.5 771,-137.5 771,-114.5 720,-114.5"/>
|
||||||
|
<text text-anchor="start" x="724" y="-122.3" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="771,-114.5 771,-137.5 811,-137.5 811,-114.5 771,-114.5"/>
|
||||||
|
<text text-anchor="start" x="775" y="-122.3" font-family="arial" font-size="14.00">5-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="811,-114.5 811,-137.5 838,-137.5 838,-114.5 811,-114.5"/>
|
||||||
|
<text text-anchor="start" x="815" y="-122.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="838,-114.5 838,-137.5 846,-137.5 846,-114.5 838,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="838,-114.5 838,-137.5 846,-137.5 846,-114.5 838,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-91.5 612,-114.5 846,-114.5 846,-91.5 612,-91.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-99.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-68.5 612,-91.5 846,-91.5 846,-68.5 612,-68.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-76.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-45.5 612,-68.5 846,-68.5 846,-45.5 612,-45.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-53.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-22.5 612,-45.5 846,-45.5 846,-22.5 612,-22.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-30.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,0.5 612,-22.5 846,-22.5 846,0.5 612,0.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-7.3" font-family="arial" font-size="14.00">5</text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--X2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>X1:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M468,-79.5C528.5,-79.5 546.11,-79.5 601.91,-79.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M468,-81.5C528.5,-81.5 546.11,-81.5 601.91,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="602,-84 612,-80.5 602,-77 602,-84"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>W2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" stroke-dasharray="5,2" points="1088,-192.5 990,-192.5 990,-8.5 1088,-8.5 1088,-192.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="990,-169.5 990,-192.5 1088,-192.5 1088,-169.5 990,-169.5"/>
|
||||||
|
<text text-anchor="start" x="1028.5" y="-177.3" font-family="arial" font-size="14.00">W2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="990,-146.5 990,-169.5 1029,-169.5 1029,-146.5 990,-146.5"/>
|
||||||
|
<text text-anchor="start" x="1002" y="-154.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1029,-146.5 1029,-169.5 1088,-169.5 1088,-146.5 1029,-146.5"/>
|
||||||
|
<text text-anchor="start" x="1040.5" y="-154.3" font-family="arial" font-size="14.00">0.2 m</text>
|
||||||
|
<text text-anchor="start" x="1004.5" y="-133.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="992" y="-114.3" font-family="arial" font-size="14.00">X2:1</text>
|
||||||
|
<text text-anchor="start" x="1025.5" y="-114.3" font-family="arial" font-size="14.00">     RD    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-106.5 990,-108.5 1088,-108.5 1088,-106.5 990,-106.5"/>
|
||||||
|
<polygon fill="#ff0000" stroke="transparent" points="990,-104.5 990,-106.5 1088,-106.5 1088,-104.5 990,-104.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-102.5 990,-104.5 1088,-104.5 1088,-102.5 990,-102.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-89.3" font-family="arial" font-size="14.00">X2:2</text>
|
||||||
|
<text text-anchor="start" x="1026.5" y="-89.3" font-family="arial" font-size="14.00">     BK    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-81.5 990,-83.5 1088,-83.5 1088,-81.5 990,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-79.5 990,-81.5 1088,-81.5 1088,-79.5 990,-79.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-77.5 990,-79.5 1088,-79.5 1088,-77.5 990,-77.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-64.3" font-family="arial" font-size="14.00">X2:3</text>
|
||||||
|
<text text-anchor="start" x="1026" y="-64.3" font-family="arial" font-size="14.00">     BU    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-56.5 990,-58.5 1088,-58.5 1088,-56.5 990,-56.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="990,-54.5 990,-56.5 1088,-56.5 1088,-54.5 990,-54.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-52.5 990,-54.5 1088,-54.5 1088,-52.5 990,-52.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-39.3" font-family="arial" font-size="14.00">X2:4</text>
|
||||||
|
<text text-anchor="start" x="1025" y="-39.3" font-family="arial" font-size="14.00">     GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-31.5 990,-33.5 1088,-33.5 1088,-31.5 990,-31.5"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="990,-29.5 990,-31.5 1088,-31.5 1088,-29.5 990,-29.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-27.5 990,-29.5 1088,-29.5 1088,-27.5 990,-27.5"/>
|
||||||
|
<text text-anchor="start" x="1004.5" y="-14.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-101.5C910.25,-101.52 926.24,-103.52 990,-103.5"/>
|
||||||
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M846,-103.5C910.01,-103.5 925.99,-105.5 990,-105.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-105.5C909.76,-105.48 925.75,-107.48 990,-107.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-77.5C910.13,-77.5 926.12,-78.5 990,-78.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-79.5C910,-79.5 926,-80.5 990,-80.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-81.5C909.88,-81.5 925.87,-82.5 990,-82.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-54.5C909.88,-54.5 925.87,-53.5 990,-53.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M846,-56.5C910,-56.5 926,-55.5 990,-55.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-58.5C910.13,-58.5 926.12,-57.5 990,-57.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-31.5C909.64,-31.53 925.62,-28.53 990,-28.5"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M846,-33.5C910.01,-33.5 925.99,-30.5 990,-30.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-35.5C910.38,-35.47 926.36,-32.47 990,-32.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" stroke-dasharray="5,2" points="102,-192.5 0,-192.5 0,-8.5 102,-8.5 102,-192.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-169.5 0,-192.5 102,-192.5 102,-169.5 0,-169.5"/>
|
||||||
|
<text text-anchor="start" x="40.5" y="-177.3" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-146.5 0,-169.5 41,-169.5 41,-146.5 0,-146.5"/>
|
||||||
|
<text text-anchor="start" x="13" y="-154.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="41,-146.5 41,-169.5 102,-169.5 102,-146.5 41,-146.5"/>
|
||||||
|
<text text-anchor="start" x="53.5" y="-154.3" font-family="arial" font-size="14.00">0.2 m</text>
|
||||||
|
<text text-anchor="start" x="2" y="-133.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="10.5" y="-114.3" font-family="arial" font-size="14.00">     RD    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-114.3" font-family="arial" font-size="14.00">X1:1</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-106.5 0,-108.5 102,-108.5 102,-106.5 0,-106.5"/>
|
||||||
|
<polygon fill="#ff0000" stroke="transparent" points="0,-104.5 0,-106.5 102,-106.5 102,-104.5 0,-104.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-102.5 0,-104.5 102,-104.5 102,-102.5 0,-102.5"/>
|
||||||
|
<text text-anchor="start" x="11.5" y="-89.3" font-family="arial" font-size="14.00">     BK    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-89.3" font-family="arial" font-size="14.00">X1:2</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-81.5 0,-83.5 102,-83.5 102,-81.5 0,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-79.5 0,-81.5 102,-81.5 102,-79.5 0,-79.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-77.5 0,-79.5 102,-79.5 102,-77.5 0,-77.5"/>
|
||||||
|
<text text-anchor="start" x="11" y="-64.3" font-family="arial" font-size="14.00">     BU    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-64.3" font-family="arial" font-size="14.00">X1:3</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-56.5 0,-58.5 102,-58.5 102,-56.5 0,-56.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="0,-54.5 0,-56.5 102,-56.5 102,-54.5 0,-54.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-52.5 0,-54.5 102,-54.5 102,-52.5 0,-52.5"/>
|
||||||
|
<text text-anchor="start" x="10" y="-39.3" font-family="arial" font-size="14.00">     GN    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-39.3" font-family="arial" font-size="14.00">X1:4</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-31.5 0,-33.5 102,-33.5 102,-31.5 0,-31.5"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="0,-29.5 0,-31.5 102,-31.5 102,-29.5 0,-29.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-27.5 0,-29.5 102,-29.5 102,-27.5 0,-27.5"/>
|
||||||
|
<text text-anchor="start" x="2" y="-14.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-103.5C165.76,-103.52 181.75,-101.52 246,-101.5"/>
|
||||||
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M102,-105.5C166.01,-105.5 181.99,-103.5 246,-103.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-107.5C166.25,-107.48 182.24,-105.48 246,-105.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-78.5C165.88,-78.5 181.87,-77.5 246,-77.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-80.5C166,-80.5 182,-79.5 246,-79.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-82.5C166.13,-82.5 182.12,-81.5 246,-81.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-53.5C166.13,-53.5 182.12,-54.5 246,-54.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M102,-55.5C166,-55.5 182,-56.5 246,-56.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-57.5C165.88,-57.5 181.87,-58.5 246,-58.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-28.5C166.38,-28.53 182.36,-31.53 246,-31.5"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M102,-30.5C166.01,-30.5 181.99,-33.5 246,-33.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-32.5C165.64,-32.47 181.62,-35.47 246,-35.5"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Bill of Materials</h2>
|
||||||
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
|
<tr>
|
||||||
|
<th class="bom_col_id">Id</th>
|
||||||
|
<th class="bom_col_description">Description</th>
|
||||||
|
<th class="bom_col_qty">Qty</th>
|
||||||
|
<th class="bom_col_unit">Unit</th>
|
||||||
|
<th class="bom_col_designators">Designators</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">1</td>
|
||||||
|
<td class="bom_col_description">Connector, Dupont 2.54mm, female, 5 pins, BK</td>
|
||||||
|
<td class="bom_col_qty">1</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">2</td>
|
||||||
|
<td class="bom_col_description">Connector, Dupont 2.54mm, male, 5 pins, BK</td>
|
||||||
|
<td class="bom_col_qty">1</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">3</td>
|
||||||
|
<td class="bom_col_description">Wire, BK</td>
|
||||||
|
<td class="bom_col_qty">0.4</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">4</td>
|
||||||
|
<td class="bom_col_description">Wire, BU</td>
|
||||||
|
<td class="bom_col_qty">0.4</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">5</td>
|
||||||
|
<td class="bom_col_description">Wire, GN</td>
|
||||||
|
<td class="bom_col_qty">0.4</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">6</td>
|
||||||
|
<td class="bom_col_description">Wire, RD</td>
|
||||||
|
<td class="bom_col_qty">0.4</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
BIN
examples/ex12.png
generated
Normal file
|
After Width: | Height: | Size: 28 KiB |
195
examples/ex12.svg
generated
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="1096pt" height="201pt"
|
||||||
|
viewBox="0.00 0.00 1096.00 200.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 196.5)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-196.5 1092,-196.5 1092,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="468,-161 246,-161 246,0 468,0 468,-161"/>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-137.5 246,-160.5 468,-160.5 468,-137.5 246,-137.5"/>
|
||||||
|
<text text-anchor="start" x="348" y="-145.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-114.5 246,-137.5 354,-137.5 354,-114.5 246,-114.5"/>
|
||||||
|
<text text-anchor="start" x="250" y="-122.3" font-family="arial" font-size="14.00">Dupont 2.54mm</text>
|
||||||
|
<polygon fill="none" stroke="black" points="354,-114.5 354,-137.5 393,-137.5 393,-114.5 354,-114.5"/>
|
||||||
|
<text text-anchor="start" x="358" y="-122.3" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="393,-114.5 393,-137.5 433,-137.5 433,-114.5 393,-114.5"/>
|
||||||
|
<text text-anchor="start" x="397" y="-122.3" font-family="arial" font-size="14.00">5-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="433,-114.5 433,-137.5 460,-137.5 460,-114.5 433,-114.5"/>
|
||||||
|
<text text-anchor="start" x="437" y="-122.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="460,-114.5 460,-137.5 468,-137.5 468,-114.5 460,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="460,-114.5 460,-137.5 468,-137.5 468,-114.5 460,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-91.5 246,-114.5 468,-114.5 468,-91.5 246,-91.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-99.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-68.5 246,-91.5 468,-91.5 468,-68.5 246,-68.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-76.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-45.5 246,-68.5 468,-68.5 468,-45.5 246,-45.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-53.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,-22.5 246,-45.5 468,-45.5 468,-22.5 246,-22.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-30.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="246,0.5 246,-22.5 468,-22.5 468,0.5 246,0.5"/>
|
||||||
|
<text text-anchor="start" x="353" y="-7.3" font-family="arial" font-size="14.00">5</text>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="846,-161 612,-161 612,0 846,0 846,-161"/>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-137.5 612,-160.5 846,-160.5 846,-137.5 612,-137.5"/>
|
||||||
|
<text text-anchor="start" x="720" y="-145.3" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-114.5 612,-137.5 720,-137.5 720,-114.5 612,-114.5"/>
|
||||||
|
<text text-anchor="start" x="616" y="-122.3" font-family="arial" font-size="14.00">Dupont 2.54mm</text>
|
||||||
|
<polygon fill="none" stroke="black" points="720,-114.5 720,-137.5 771,-137.5 771,-114.5 720,-114.5"/>
|
||||||
|
<text text-anchor="start" x="724" y="-122.3" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="771,-114.5 771,-137.5 811,-137.5 811,-114.5 771,-114.5"/>
|
||||||
|
<text text-anchor="start" x="775" y="-122.3" font-family="arial" font-size="14.00">5-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="811,-114.5 811,-137.5 838,-137.5 838,-114.5 811,-114.5"/>
|
||||||
|
<text text-anchor="start" x="815" y="-122.3" font-family="arial" font-size="14.00">BK</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="838,-114.5 838,-137.5 846,-137.5 846,-114.5 838,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="838,-114.5 838,-137.5 846,-137.5 846,-114.5 838,-114.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-91.5 612,-114.5 846,-114.5 846,-91.5 612,-91.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-99.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-68.5 612,-91.5 846,-91.5 846,-68.5 612,-68.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-76.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-45.5 612,-68.5 846,-68.5 846,-45.5 612,-45.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-53.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,-22.5 612,-45.5 846,-45.5 846,-22.5 612,-22.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-30.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="612,0.5 612,-22.5 846,-22.5 846,0.5 612,0.5"/>
|
||||||
|
<text text-anchor="start" x="725" y="-7.3" font-family="arial" font-size="14.00">5</text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--X2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>X1:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M468,-79.5C528.5,-79.5 546.11,-79.5 601.91,-79.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M468,-81.5C528.5,-81.5 546.11,-81.5 601.91,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="602,-84 612,-80.5 602,-77 602,-84"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>W2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" stroke-dasharray="5,2" points="1088,-192.5 990,-192.5 990,-8.5 1088,-8.5 1088,-192.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="990,-169.5 990,-192.5 1088,-192.5 1088,-169.5 990,-169.5"/>
|
||||||
|
<text text-anchor="start" x="1028.5" y="-177.3" font-family="arial" font-size="14.00">W2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="990,-146.5 990,-169.5 1029,-169.5 1029,-146.5 990,-146.5"/>
|
||||||
|
<text text-anchor="start" x="1002" y="-154.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1029,-146.5 1029,-169.5 1088,-169.5 1088,-146.5 1029,-146.5"/>
|
||||||
|
<text text-anchor="start" x="1040.5" y="-154.3" font-family="arial" font-size="14.00">0.2 m</text>
|
||||||
|
<text text-anchor="start" x="1004.5" y="-133.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="992" y="-114.3" font-family="arial" font-size="14.00">X2:1</text>
|
||||||
|
<text text-anchor="start" x="1025.5" y="-114.3" font-family="arial" font-size="14.00">     RD    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-106.5 990,-108.5 1088,-108.5 1088,-106.5 990,-106.5"/>
|
||||||
|
<polygon fill="#ff0000" stroke="transparent" points="990,-104.5 990,-106.5 1088,-106.5 1088,-104.5 990,-104.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-102.5 990,-104.5 1088,-104.5 1088,-102.5 990,-102.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-89.3" font-family="arial" font-size="14.00">X2:2</text>
|
||||||
|
<text text-anchor="start" x="1026.5" y="-89.3" font-family="arial" font-size="14.00">     BK    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-81.5 990,-83.5 1088,-83.5 1088,-81.5 990,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-79.5 990,-81.5 1088,-81.5 1088,-79.5 990,-79.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-77.5 990,-79.5 1088,-79.5 1088,-77.5 990,-77.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-64.3" font-family="arial" font-size="14.00">X2:3</text>
|
||||||
|
<text text-anchor="start" x="1026" y="-64.3" font-family="arial" font-size="14.00">     BU    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-56.5 990,-58.5 1088,-58.5 1088,-56.5 990,-56.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="990,-54.5 990,-56.5 1088,-56.5 1088,-54.5 990,-54.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-52.5 990,-54.5 1088,-54.5 1088,-52.5 990,-52.5"/>
|
||||||
|
<text text-anchor="start" x="992" y="-39.3" font-family="arial" font-size="14.00">X2:4</text>
|
||||||
|
<text text-anchor="start" x="1025" y="-39.3" font-family="arial" font-size="14.00">     GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-31.5 990,-33.5 1088,-33.5 1088,-31.5 990,-31.5"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="990,-29.5 990,-31.5 1088,-31.5 1088,-29.5 990,-29.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="990,-27.5 990,-29.5 1088,-29.5 1088,-27.5 990,-27.5"/>
|
||||||
|
<text text-anchor="start" x="1004.5" y="-14.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-101.5C910.25,-101.52 926.24,-103.52 990,-103.5"/>
|
||||||
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M846,-103.5C910.01,-103.5 925.99,-105.5 990,-105.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-105.5C909.76,-105.48 925.75,-107.48 990,-107.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-77.5C910.13,-77.5 926.12,-78.5 990,-78.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-79.5C910,-79.5 926,-80.5 990,-80.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-81.5C909.88,-81.5 925.87,-82.5 990,-82.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-54.5C909.88,-54.5 925.87,-53.5 990,-53.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M846,-56.5C910,-56.5 926,-55.5 990,-55.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-58.5C910.13,-58.5 926.12,-57.5 990,-57.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2--W2 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>X2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-31.5C909.64,-31.53 925.62,-28.53 990,-28.5"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M846,-33.5C910.01,-33.5 925.99,-30.5 990,-30.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M846,-35.5C910.38,-35.47 926.36,-32.47 990,-32.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" stroke-dasharray="5,2" points="102,-192.5 0,-192.5 0,-8.5 102,-8.5 102,-192.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-169.5 0,-192.5 102,-192.5 102,-169.5 0,-169.5"/>
|
||||||
|
<text text-anchor="start" x="40.5" y="-177.3" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-146.5 0,-169.5 41,-169.5 41,-146.5 0,-146.5"/>
|
||||||
|
<text text-anchor="start" x="13" y="-154.3" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="41,-146.5 41,-169.5 102,-169.5 102,-146.5 41,-146.5"/>
|
||||||
|
<text text-anchor="start" x="53.5" y="-154.3" font-family="arial" font-size="14.00">0.2 m</text>
|
||||||
|
<text text-anchor="start" x="2" y="-133.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="10.5" y="-114.3" font-family="arial" font-size="14.00">     RD    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-114.3" font-family="arial" font-size="14.00">X1:1</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-106.5 0,-108.5 102,-108.5 102,-106.5 0,-106.5"/>
|
||||||
|
<polygon fill="#ff0000" stroke="transparent" points="0,-104.5 0,-106.5 102,-106.5 102,-104.5 0,-104.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-102.5 0,-104.5 102,-104.5 102,-102.5 0,-102.5"/>
|
||||||
|
<text text-anchor="start" x="11.5" y="-89.3" font-family="arial" font-size="14.00">     BK    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-89.3" font-family="arial" font-size="14.00">X1:2</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-81.5 0,-83.5 102,-83.5 102,-81.5 0,-81.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-79.5 0,-81.5 102,-81.5 102,-79.5 0,-79.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-77.5 0,-79.5 102,-79.5 102,-77.5 0,-77.5"/>
|
||||||
|
<text text-anchor="start" x="11" y="-64.3" font-family="arial" font-size="14.00">     BU    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-64.3" font-family="arial" font-size="14.00">X1:3</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-56.5 0,-58.5 102,-58.5 102,-56.5 0,-56.5"/>
|
||||||
|
<polygon fill="#0066ff" stroke="transparent" points="0,-54.5 0,-56.5 102,-56.5 102,-54.5 0,-54.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-52.5 0,-54.5 102,-54.5 102,-52.5 0,-52.5"/>
|
||||||
|
<text text-anchor="start" x="10" y="-39.3" font-family="arial" font-size="14.00">     GN    </text>
|
||||||
|
<text text-anchor="start" x="71" y="-39.3" font-family="arial" font-size="14.00">X1:4</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-31.5 0,-33.5 102,-33.5 102,-31.5 0,-31.5"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="0,-29.5 0,-31.5 102,-31.5 102,-29.5 0,-29.5"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="0,-27.5 0,-29.5 102,-29.5 102,-27.5 0,-27.5"/>
|
||||||
|
<text text-anchor="start" x="2" y="-14.3" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-103.5C165.76,-103.52 181.75,-101.52 246,-101.5"/>
|
||||||
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M102,-105.5C166.01,-105.5 181.99,-103.5 246,-103.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-107.5C166.25,-107.48 182.24,-105.48 246,-105.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-78.5C165.88,-78.5 181.87,-77.5 246,-77.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-80.5C166,-80.5 182,-79.5 246,-79.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-82.5C166.13,-82.5 182.12,-81.5 246,-81.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-53.5C166.13,-53.5 182.12,-54.5 246,-54.5"/>
|
||||||
|
<path fill="none" stroke="#0066ff" stroke-width="2" d="M102,-55.5C166,-55.5 182,-56.5 246,-56.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-57.5C165.88,-57.5 181.87,-58.5 246,-58.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--X1 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--X1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-28.5C166.38,-28.53 182.36,-31.53 246,-31.5"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M102,-30.5C166.01,-30.5 181.99,-33.5 246,-33.5"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M102,-32.5C165.64,-32.47 181.62,-35.47 246,-35.5"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 15 KiB |
4
examples/ex13.bom.tsv
generated
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Id Description Qty Unit Designators
|
||||||
|
1 Cable, 4 wires 0 m C1, C2, C3
|
||||||
|
2 Connector, 4 pins 3 X1, X2, X3
|
||||||
|
3 Connector, ferrule 4
|
||||||
|
433
examples/ex13.gv
generated
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
graph {
|
||||||
|
// Graph generated by WireViz 0.4-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=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td>A</td>
|
||||||
|
<td port="p1r">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>B</td>
|
||||||
|
<td port="p2r">2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>C</td>
|
||||||
|
<td port="p3r">3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>D</td>
|
||||||
|
<td port="p4r">4</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
F1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">ferrule</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
F2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">ferrule</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
F3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">ferrule</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
F4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">ferrule</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
<td>A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
<td>B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
<td>C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
<td>D</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X3</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
<td>A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
<td>B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
<td>C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
<td>D</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
X1:p1r:e -- C1:w1:w
|
||||||
|
C1:w1:e -- F1:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
X1:p2r:e -- C1:w2:w
|
||||||
|
C1:w2:e -- F2:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
X1:p3r:e -- C1:w3:w
|
||||||
|
C1:w3:e -- F3:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
X1:p4r:e -- C1:w4:w
|
||||||
|
C1:w4:e -- F4:w
|
||||||
|
C1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">C1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:1:A</td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:2:B</td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:3:C</td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:4:D</td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
F1:e -- C2:w1:w
|
||||||
|
C2:w1:e -- X2:p1l:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
F2:e -- C2:w2:w
|
||||||
|
C2:w2:e -- X2:p2l:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
F3:e -- C2:w3:w
|
||||||
|
C2:w3:e -- X2:p3l:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
F4:e -- C2:w4:w
|
||||||
|
C2:w4:e -- X2:p4l:w
|
||||||
|
C2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">C2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td>X2:1:A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td>X2:2:B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td>X2:3:C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td>X2:4:D</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
F1:e -- C3:w1:w
|
||||||
|
C3:w1:e -- X3:p1l:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
F2:e -- C3:w2:w
|
||||||
|
C3:w2:e -- X3:p2l:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
F3:e -- C3:w3:w
|
||||||
|
C3:w3:e -- X3:p3l:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
F4:e -- C3:w4:w
|
||||||
|
C3:w4:e -- X3:p4l:w
|
||||||
|
C3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">C3</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td>X3:1:A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td>X3:2:B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td>X3:3:C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td>X3:4:D</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
}
|
||||||
449
examples/ex13.html
generated
Normal file
@ -0,0 +1,449 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
|
<title>ex13</title>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
|
<h1>ex13</h1>
|
||||||
|
<h2>Diagram</h2>
|
||||||
|
|
||||||
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="968pt" height="400pt"
|
||||||
|
viewBox="0.00 0.00 968.00 400.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 396)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-396 964,-396 964,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="40,-256 0,-256 0,-118 40,-118 40,-256"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-233 0,-256 40,-256 40,-233 0,-233"/>
|
||||||
|
<text text-anchor="start" x="11" y="-240.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-210 0,-233 40,-233 40,-210 0,-210"/>
|
||||||
|
<text text-anchor="start" x="4" y="-217.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-187 0,-210 22,-210 22,-187 0,-187"/>
|
||||||
|
<text text-anchor="start" x="6" y="-194.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-187 22,-210 40,-210 40,-187 22,-187"/>
|
||||||
|
<text text-anchor="start" x="27" y="-194.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-164 0,-187 22,-187 22,-164 0,-164"/>
|
||||||
|
<text text-anchor="start" x="6" y="-171.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-164 22,-187 40,-187 40,-164 22,-164"/>
|
||||||
|
<text text-anchor="start" x="27" y="-171.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-141 0,-164 22,-164 22,-141 0,-141"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-148.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-141 22,-164 40,-164 40,-141 22,-141"/>
|
||||||
|
<text text-anchor="start" x="27" y="-148.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-118 0,-141 22,-141 22,-118 0,-118"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-125.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-118 22,-141 40,-141 40,-118 22,-118"/>
|
||||||
|
<text text-anchor="start" x="27" y="-125.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- C1 -->
|
||||||
|
<g id="node8" class="node">
|
||||||
|
<title>C1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="310,-288 184,-288 184,-104 310,-104 310,-288"/>
|
||||||
|
<polygon fill="none" stroke="black" points="184,-265 184,-288 310,-288 310,-265 184,-265"/>
|
||||||
|
<text text-anchor="start" x="238" y="-272.8" font-family="arial" font-size="14.00">C1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="184,-242 184,-265 310,-265 310,-242 184,-242"/>
|
||||||
|
<text text-anchor="start" x="239.5" y="-249.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="205.5" y="-228.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="186" y="-209.8" font-family="arial" font-size="14.00">X1:1:A</text>
|
||||||
|
<text text-anchor="start" x="233" y="-209.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-202 184,-204 310,-204 310,-202 184,-202"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="184,-200 184,-202 310,-202 310,-200 184,-200"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-198 184,-200 310,-200 310,-198 184,-198"/>
|
||||||
|
<text text-anchor="start" x="186" y="-184.8" font-family="arial" font-size="14.00">X1:2:B</text>
|
||||||
|
<text text-anchor="start" x="235" y="-184.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-177 184,-179 310,-179 310,-177 184,-177"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="184,-175 184,-177 310,-177 310,-175 184,-175"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-173 184,-175 310,-175 310,-173 184,-173"/>
|
||||||
|
<text text-anchor="start" x="186" y="-159.8" font-family="arial" font-size="14.00">X1:3:C</text>
|
||||||
|
<text text-anchor="start" x="234.5" y="-159.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-152 184,-154 310,-154 310,-152 184,-152"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="184,-150 184,-152 310,-152 310,-150 184,-150"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-148 184,-150 310,-150 310,-148 184,-148"/>
|
||||||
|
<text text-anchor="start" x="186" y="-134.8" font-family="arial" font-size="14.00">X1:4:D</text>
|
||||||
|
<text text-anchor="start" x="235.5" y="-134.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-127 184,-129 310,-129 310,-127 184,-127"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="184,-125 184,-127 310,-127 310,-125 184,-125"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-123 184,-125 310,-125 310,-123 184,-123"/>
|
||||||
|
<text text-anchor="start" x="205.5" y="-109.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-197C104.25,-197.02 120.24,-199.02 184,-199"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M40,-199C104.01,-199 119.99,-201 184,-201"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-201C103.76,-200.98 119.75,-202.98 184,-203"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-173C104.13,-173 120.12,-174 184,-174"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M40,-175C104,-175 120,-176 184,-176"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-177C103.88,-177 119.87,-178 184,-178"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-150C103.88,-150 119.87,-149 184,-149"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M40,-152C104,-152 120,-151 184,-151"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-154C104.13,-154 120.12,-153 184,-153"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-127C103.64,-127.03 119.62,-124.03 184,-124"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M40,-129C104.01,-129 119.99,-126 184,-126"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-131C104.38,-130.97 120.36,-127.97 184,-128"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>F1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-245.5 454,-245.5 454,-222.5 502,-222.5 502,-245.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-222 454,-245 502,-245 502,-222 454,-222"/>
|
||||||
|
<text text-anchor="start" x="458" y="-229.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- C2 -->
|
||||||
|
<g id="node9" class="node">
|
||||||
|
<title>C2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="776,-392 646,-392 646,-208 776,-208 776,-392"/>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-369 646,-392 776,-392 776,-369 646,-369"/>
|
||||||
|
<text text-anchor="start" x="702" y="-376.8" font-family="arial" font-size="14.00">C2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-346 646,-369 776,-369 776,-346 646,-346"/>
|
||||||
|
<text text-anchor="start" x="703.5" y="-353.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="648" y="-332.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="656" y="-313.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-313.8" font-family="arial" font-size="14.00">X2:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-306 646,-308 776,-308 776,-306 646,-306"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="646,-304 646,-306 776,-306 776,-304 646,-304"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-302 646,-304 776,-304 776,-302 646,-302"/>
|
||||||
|
<text text-anchor="start" x="658" y="-288.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-288.8" font-family="arial" font-size="14.00">X2:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-281 646,-283 776,-283 776,-281 646,-281"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="646,-279 646,-281 776,-281 776,-279 646,-279"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-277 646,-279 776,-279 776,-277 646,-277"/>
|
||||||
|
<text text-anchor="start" x="657.5" y="-263.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-263.8" font-family="arial" font-size="14.00">X2:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-256 646,-258 776,-258 776,-256 646,-256"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="646,-254 646,-256 776,-256 776,-254 646,-254"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-252 646,-254 776,-254 776,-252 646,-252"/>
|
||||||
|
<text text-anchor="start" x="658.5" y="-238.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-238.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-231 646,-233 776,-233 776,-231 646,-231"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="646,-229 646,-231 776,-231 776,-229 646,-229"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-227 646,-229 776,-229 776,-227 646,-227"/>
|
||||||
|
<text text-anchor="start" x="648" y="-213.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- F1--C2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>F1:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-232C575.36,-233.96 576.64,-304.96 646,-303"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M502,-234C573.36,-234 574.64,-305 646,-305"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-236C571.36,-234.04 572.64,-305.04 646,-307"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3 -->
|
||||||
|
<g id="node10" class="node">
|
||||||
|
<title>C3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="776,-184 646,-184 646,0 776,0 776,-184"/>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-161 646,-184 776,-184 776,-161 646,-161"/>
|
||||||
|
<text text-anchor="start" x="702" y="-168.8" font-family="arial" font-size="14.00">C3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-138 646,-161 776,-161 776,-138 646,-138"/>
|
||||||
|
<text text-anchor="start" x="703.5" y="-145.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="648" y="-124.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="656" y="-105.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-105.8" font-family="arial" font-size="14.00">X3:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-98 646,-100 776,-100 776,-98 646,-98"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="646,-96 646,-98 776,-98 776,-96 646,-96"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-94 646,-96 776,-96 776,-94 646,-94"/>
|
||||||
|
<text text-anchor="start" x="658" y="-80.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-80.8" font-family="arial" font-size="14.00">X3:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-73 646,-75 776,-75 776,-73 646,-73"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="646,-71 646,-73 776,-73 776,-71 646,-71"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-69 646,-71 776,-71 776,-69 646,-69"/>
|
||||||
|
<text text-anchor="start" x="657.5" y="-55.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-55.8" font-family="arial" font-size="14.00">X3:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-48 646,-50 776,-50 776,-48 646,-48"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="646,-46 646,-48 776,-48 776,-46 646,-46"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-44 646,-46 776,-46 776,-44 646,-44"/>
|
||||||
|
<text text-anchor="start" x="658.5" y="-30.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-30.8" font-family="arial" font-size="14.00">X3:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-23 646,-25 776,-25 776,-23 646,-23"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="646,-21 646,-23 776,-23 776,-21 646,-21"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-19 646,-21 776,-21 776,-19 646,-19"/>
|
||||||
|
<text text-anchor="start" x="648" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- F1--C3 -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>F1:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-232C588.39,-234.46 555.72,-97.46 646,-95"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M502,-234C590.34,-234 557.66,-97 646,-97"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-236C592.28,-233.54 559.61,-96.54 646,-99"/>
|
||||||
|
</g>
|
||||||
|
<!-- F2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>F2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-198.5 454,-198.5 454,-175.5 502,-175.5 502,-198.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-175 454,-198 502,-198 502,-175 454,-175"/>
|
||||||
|
<text text-anchor="start" x="458" y="-182.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F2--C2 -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>F2:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-185C580.18,-187.18 571.81,-280.18 646,-278"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M502,-187C578.19,-187 569.81,-280 646,-280"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-189C576.19,-186.82 567.82,-279.82 646,-282"/>
|
||||||
|
</g>
|
||||||
|
<!-- F2--C3 -->
|
||||||
|
<g id="edge19" class="edge">
|
||||||
|
<title>F2:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-185C581.93,-187.34 562.12,-72.34 646,-70"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M502,-187C583.9,-187 564.1,-72 646,-72"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-189C585.88,-186.66 566.07,-71.66 646,-74"/>
|
||||||
|
</g>
|
||||||
|
<!-- F3 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>F3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-151.5 454,-151.5 454,-128.5 502,-128.5 502,-151.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-128 454,-151 502,-151 502,-128 454,-128"/>
|
||||||
|
<text text-anchor="start" x="458" y="-135.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F3--C2 -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>F3:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-138C585.88,-140.34 566.07,-255.34 646,-253"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M502,-140C583.9,-140 564.1,-255 646,-255"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-142C581.93,-139.66 562.12,-254.66 646,-257"/>
|
||||||
|
</g>
|
||||||
|
<!-- F3--C3 -->
|
||||||
|
<g id="edge21" class="edge">
|
||||||
|
<title>F3:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-138C576.19,-140.18 567.82,-47.18 646,-45"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M502,-140C578.19,-140 569.81,-47 646,-47"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-142C580.18,-139.82 571.81,-46.82 646,-49"/>
|
||||||
|
</g>
|
||||||
|
<!-- F4 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>F4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-104.5 454,-104.5 454,-81.5 502,-81.5 502,-104.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-81 454,-104 502,-104 502,-81 454,-81"/>
|
||||||
|
<text text-anchor="start" x="458" y="-88.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F4--C2 -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>F4:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-91C592.28,-93.46 559.61,-230.46 646,-228"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M502,-93C590.34,-93 557.66,-230 646,-230"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-95C588.39,-92.54 555.72,-229.54 646,-232"/>
|
||||||
|
</g>
|
||||||
|
<!-- F4--C3 -->
|
||||||
|
<g id="edge23" class="edge">
|
||||||
|
<title>F4:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-91C571.36,-92.96 572.64,-21.96 646,-20"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M502,-93C573.36,-93 574.64,-22 646,-22"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-95C575.36,-93.04 576.64,-22.04 646,-24"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="960,-360 920,-360 920,-222 960,-222 960,-360"/>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-337 920,-360 960,-360 960,-337 920,-337"/>
|
||||||
|
<text text-anchor="start" x="931" y="-344.8" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-314 920,-337 960,-337 960,-314 920,-314"/>
|
||||||
|
<text text-anchor="start" x="924" y="-321.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-291 920,-314 939,-314 939,-291 920,-291"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-298.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-291 939,-314 960,-314 960,-291 939,-291"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-298.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-268 920,-291 939,-291 939,-268 920,-268"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-275.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-268 939,-291 960,-291 960,-268 939,-268"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-275.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-245 920,-268 939,-268 939,-245 920,-245"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-252.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-245 939,-268 960,-268 960,-245 939,-245"/>
|
||||||
|
<text text-anchor="start" x="944" y="-252.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-222 920,-245 939,-245 939,-222 920,-222"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-229.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-222 939,-245 960,-245 960,-222 939,-222"/>
|
||||||
|
<text text-anchor="start" x="944" y="-229.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- X3 -->
|
||||||
|
<g id="node7" class="node">
|
||||||
|
<title>X3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="960,-152 920,-152 920,-14 960,-14 960,-152"/>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-129 920,-152 960,-152 960,-129 920,-129"/>
|
||||||
|
<text text-anchor="start" x="931" y="-136.8" font-family="arial" font-size="14.00">X3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-106 920,-129 960,-129 960,-106 920,-106"/>
|
||||||
|
<text text-anchor="start" x="924" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-83 920,-106 939,-106 939,-83 920,-83"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-83 939,-106 960,-106 960,-83 939,-83"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-90.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-60 920,-83 939,-83 939,-60 920,-60"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-60 939,-83 960,-83 960,-60 939,-60"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-67.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-37 920,-60 939,-60 939,-37 920,-37"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-37 939,-60 960,-60 960,-37 939,-37"/>
|
||||||
|
<text text-anchor="start" x="944" y="-44.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-14 920,-37 939,-37 939,-14 920,-14"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-14 939,-37 960,-37 960,-14 939,-14"/>
|
||||||
|
<text text-anchor="start" x="944" y="-21.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>C1:e--F1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-199C377.53,-200.28 390.21,-233.28 454,-232"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M310,-201C375.66,-201 388.34,-234 454,-234"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-203C373.79,-201.72 386.47,-234.72 454,-236"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F2 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>C1:e--F2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-174C375.34,-174.36 390.96,-185.36 454,-185"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M310,-176C374.19,-176 389.81,-187 454,-187"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-178C373.04,-177.64 388.66,-188.64 454,-189"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F3 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>C1:e--F3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-149C373.04,-149.36 388.66,-138.36 454,-138"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M310,-151C374.19,-151 389.81,-140 454,-140"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-153C375.34,-152.64 390.96,-141.64 454,-142"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F4 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>C1:e--F4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-124C373.79,-125.28 386.47,-92.28 454,-91"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M310,-126C375.66,-126 388.34,-93 454,-93"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-128C377.53,-126.72 390.21,-93.72 454,-95"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-303C839.76,-303.02 855.75,-301.02 920,-301"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M776,-305C840.01,-305 855.99,-303 920,-303"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-307C840.25,-306.98 856.24,-304.98 920,-305"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-278C839.88,-278 855.87,-277 920,-277"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M776,-280C840,-280 856,-279 920,-279"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-282C840.13,-282 856.12,-281 920,-281"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-253C840.13,-253 856.12,-254 920,-254"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M776,-255C840,-255 856,-256 920,-256"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-257C839.88,-257 855.87,-258 920,-258"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-228C840.38,-228.03 856.36,-231.03 920,-231"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M776,-230C840.01,-230 855.99,-233 920,-233"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-232C839.64,-231.97 855.62,-234.97 920,-235"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge18" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-95C839.76,-95.02 855.75,-93.02 920,-93"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M776,-97C840.01,-97 855.99,-95 920,-95"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-99C840.25,-98.98 856.24,-96.98 920,-97"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge20" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-70C839.88,-70 855.87,-69 920,-69"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M776,-72C840,-72 856,-71 920,-71"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-74C840.13,-74 856.12,-73 920,-73"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge22" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-45C840.13,-45 856.12,-46 920,-46"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M776,-47C840,-47 856,-48 920,-48"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-49C839.88,-49 855.87,-50 920,-50"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge24" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-20C840.38,-20.03 856.36,-23.03 920,-23"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M776,-22C840.01,-22 855.99,-25 920,-25"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-24C839.64,-23.97 855.62,-26.97 920,-27"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Bill of Materials</h2>
|
||||||
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
|
<tr>
|
||||||
|
<th class="bom_col_id">Id</th>
|
||||||
|
<th class="bom_col_description">Description</th>
|
||||||
|
<th class="bom_col_qty">Qty</th>
|
||||||
|
<th class="bom_col_unit">Unit</th>
|
||||||
|
<th class="bom_col_designators">Designators</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">1</td>
|
||||||
|
<td class="bom_col_description">Cable, 4 wires</td>
|
||||||
|
<td class="bom_col_qty">0</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">C1, C2, C3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">2</td>
|
||||||
|
<td class="bom_col_description">Connector, 4 pins</td>
|
||||||
|
<td class="bom_col_qty">3</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X1, X2, X3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">3</td>
|
||||||
|
<td class="bom_col_description">Connector, ferrule</td>
|
||||||
|
<td class="bom_col_qty">4</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
BIN
examples/ex13.png
generated
Normal file
|
After Width: | Height: | Size: 120 KiB |
376
examples/ex13.svg
generated
Normal file
@ -0,0 +1,376 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="968pt" height="400pt"
|
||||||
|
viewBox="0.00 0.00 968.00 400.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 396)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-396 964,-396 964,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="40,-256 0,-256 0,-118 40,-118 40,-256"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-233 0,-256 40,-256 40,-233 0,-233"/>
|
||||||
|
<text text-anchor="start" x="11" y="-240.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-210 0,-233 40,-233 40,-210 0,-210"/>
|
||||||
|
<text text-anchor="start" x="4" y="-217.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-187 0,-210 22,-210 22,-187 0,-187"/>
|
||||||
|
<text text-anchor="start" x="6" y="-194.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-187 22,-210 40,-210 40,-187 22,-187"/>
|
||||||
|
<text text-anchor="start" x="27" y="-194.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-164 0,-187 22,-187 22,-164 0,-164"/>
|
||||||
|
<text text-anchor="start" x="6" y="-171.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-164 22,-187 40,-187 40,-164 22,-164"/>
|
||||||
|
<text text-anchor="start" x="27" y="-171.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-141 0,-164 22,-164 22,-141 0,-141"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-148.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-141 22,-164 40,-164 40,-141 22,-141"/>
|
||||||
|
<text text-anchor="start" x="27" y="-148.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0,-118 0,-141 22,-141 22,-118 0,-118"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-125.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="22,-118 22,-141 40,-141 40,-118 22,-118"/>
|
||||||
|
<text text-anchor="start" x="27" y="-125.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- C1 -->
|
||||||
|
<g id="node8" class="node">
|
||||||
|
<title>C1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="310,-288 184,-288 184,-104 310,-104 310,-288"/>
|
||||||
|
<polygon fill="none" stroke="black" points="184,-265 184,-288 310,-288 310,-265 184,-265"/>
|
||||||
|
<text text-anchor="start" x="238" y="-272.8" font-family="arial" font-size="14.00">C1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="184,-242 184,-265 310,-265 310,-242 184,-242"/>
|
||||||
|
<text text-anchor="start" x="239.5" y="-249.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="205.5" y="-228.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="186" y="-209.8" font-family="arial" font-size="14.00">X1:1:A</text>
|
||||||
|
<text text-anchor="start" x="233" y="-209.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-202 184,-204 310,-204 310,-202 184,-202"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="184,-200 184,-202 310,-202 310,-200 184,-200"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-198 184,-200 310,-200 310,-198 184,-198"/>
|
||||||
|
<text text-anchor="start" x="186" y="-184.8" font-family="arial" font-size="14.00">X1:2:B</text>
|
||||||
|
<text text-anchor="start" x="235" y="-184.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-177 184,-179 310,-179 310,-177 184,-177"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="184,-175 184,-177 310,-177 310,-175 184,-175"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-173 184,-175 310,-175 310,-173 184,-173"/>
|
||||||
|
<text text-anchor="start" x="186" y="-159.8" font-family="arial" font-size="14.00">X1:3:C</text>
|
||||||
|
<text text-anchor="start" x="234.5" y="-159.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-152 184,-154 310,-154 310,-152 184,-152"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="184,-150 184,-152 310,-152 310,-150 184,-150"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-148 184,-150 310,-150 310,-148 184,-148"/>
|
||||||
|
<text text-anchor="start" x="186" y="-134.8" font-family="arial" font-size="14.00">X1:4:D</text>
|
||||||
|
<text text-anchor="start" x="235.5" y="-134.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-127 184,-129 310,-129 310,-127 184,-127"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="184,-125 184,-127 310,-127 310,-125 184,-125"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="184,-123 184,-125 310,-125 310,-123 184,-123"/>
|
||||||
|
<text text-anchor="start" x="205.5" y="-109.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-197C104.25,-197.02 120.24,-199.02 184,-199"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M40,-199C104.01,-199 119.99,-201 184,-201"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-201C103.76,-200.98 119.75,-202.98 184,-203"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-173C104.13,-173 120.12,-174 184,-174"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M40,-175C104,-175 120,-176 184,-176"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-177C103.88,-177 119.87,-178 184,-178"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-150C103.88,-150 119.87,-149 184,-149"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M40,-152C104,-152 120,-151 184,-151"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-154C104.13,-154 120.12,-153 184,-153"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--C1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X1:e--C1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-127C103.64,-127.03 119.62,-124.03 184,-124"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M40,-129C104.01,-129 119.99,-126 184,-126"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M40,-131C104.38,-130.97 120.36,-127.97 184,-128"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>F1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-245.5 454,-245.5 454,-222.5 502,-222.5 502,-245.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-222 454,-245 502,-245 502,-222 454,-222"/>
|
||||||
|
<text text-anchor="start" x="458" y="-229.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- C2 -->
|
||||||
|
<g id="node9" class="node">
|
||||||
|
<title>C2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="776,-392 646,-392 646,-208 776,-208 776,-392"/>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-369 646,-392 776,-392 776,-369 646,-369"/>
|
||||||
|
<text text-anchor="start" x="702" y="-376.8" font-family="arial" font-size="14.00">C2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-346 646,-369 776,-369 776,-346 646,-346"/>
|
||||||
|
<text text-anchor="start" x="703.5" y="-353.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="648" y="-332.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="656" y="-313.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-313.8" font-family="arial" font-size="14.00">X2:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-306 646,-308 776,-308 776,-306 646,-306"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="646,-304 646,-306 776,-306 776,-304 646,-304"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-302 646,-304 776,-304 776,-302 646,-302"/>
|
||||||
|
<text text-anchor="start" x="658" y="-288.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-288.8" font-family="arial" font-size="14.00">X2:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-281 646,-283 776,-283 776,-281 646,-281"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="646,-279 646,-281 776,-281 776,-279 646,-279"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-277 646,-279 776,-279 776,-277 646,-277"/>
|
||||||
|
<text text-anchor="start" x="657.5" y="-263.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-263.8" font-family="arial" font-size="14.00">X2:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-256 646,-258 776,-258 776,-256 646,-256"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="646,-254 646,-256 776,-256 776,-254 646,-254"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-252 646,-254 776,-254 776,-252 646,-252"/>
|
||||||
|
<text text-anchor="start" x="658.5" y="-238.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-238.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-231 646,-233 776,-233 776,-231 646,-231"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="646,-229 646,-231 776,-231 776,-229 646,-229"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-227 646,-229 776,-229 776,-227 646,-227"/>
|
||||||
|
<text text-anchor="start" x="648" y="-213.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- F1--C2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>F1:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-232C575.36,-233.96 576.64,-304.96 646,-303"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M502,-234C573.36,-234 574.64,-305 646,-305"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-236C571.36,-234.04 572.64,-305.04 646,-307"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3 -->
|
||||||
|
<g id="node10" class="node">
|
||||||
|
<title>C3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="776,-184 646,-184 646,0 776,0 776,-184"/>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-161 646,-184 776,-184 776,-161 646,-161"/>
|
||||||
|
<text text-anchor="start" x="702" y="-168.8" font-family="arial" font-size="14.00">C3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="646,-138 646,-161 776,-161 776,-138 646,-138"/>
|
||||||
|
<text text-anchor="start" x="703.5" y="-145.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<text text-anchor="start" x="648" y="-124.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="656" y="-105.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-105.8" font-family="arial" font-size="14.00">X3:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-98 646,-100 776,-100 776,-98 646,-98"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="646,-96 646,-98 776,-98 776,-96 646,-96"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-94 646,-96 776,-96 776,-94 646,-94"/>
|
||||||
|
<text text-anchor="start" x="658" y="-80.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-80.8" font-family="arial" font-size="14.00">X3:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-73 646,-75 776,-75 776,-73 646,-73"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="646,-71 646,-73 776,-73 776,-71 646,-71"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-69 646,-71 776,-71 776,-69 646,-69"/>
|
||||||
|
<text text-anchor="start" x="657.5" y="-55.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-55.8" font-family="arial" font-size="14.00">X3:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-48 646,-50 776,-50 776,-48 646,-48"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="646,-46 646,-48 776,-48 776,-46 646,-46"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-44 646,-46 776,-46 776,-44 646,-44"/>
|
||||||
|
<text text-anchor="start" x="658.5" y="-30.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="731" y="-30.8" font-family="arial" font-size="14.00">X3:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-23 646,-25 776,-25 776,-23 646,-23"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="646,-21 646,-23 776,-23 776,-21 646,-21"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="646,-19 646,-21 776,-21 776,-19 646,-19"/>
|
||||||
|
<text text-anchor="start" x="648" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- F1--C3 -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>F1:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-232C588.39,-234.46 555.72,-97.46 646,-95"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M502,-234C590.34,-234 557.66,-97 646,-97"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-236C592.28,-233.54 559.61,-96.54 646,-99"/>
|
||||||
|
</g>
|
||||||
|
<!-- F2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>F2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-198.5 454,-198.5 454,-175.5 502,-175.5 502,-198.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-175 454,-198 502,-198 502,-175 454,-175"/>
|
||||||
|
<text text-anchor="start" x="458" y="-182.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F2--C2 -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>F2:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-185C580.18,-187.18 571.81,-280.18 646,-278"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M502,-187C578.19,-187 569.81,-280 646,-280"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-189C576.19,-186.82 567.82,-279.82 646,-282"/>
|
||||||
|
</g>
|
||||||
|
<!-- F2--C3 -->
|
||||||
|
<g id="edge19" class="edge">
|
||||||
|
<title>F2:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-185C581.93,-187.34 562.12,-72.34 646,-70"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M502,-187C583.9,-187 564.1,-72 646,-72"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-189C585.88,-186.66 566.07,-71.66 646,-74"/>
|
||||||
|
</g>
|
||||||
|
<!-- F3 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>F3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-151.5 454,-151.5 454,-128.5 502,-128.5 502,-151.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-128 454,-151 502,-151 502,-128 454,-128"/>
|
||||||
|
<text text-anchor="start" x="458" y="-135.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F3--C2 -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>F3:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-138C585.88,-140.34 566.07,-255.34 646,-253"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M502,-140C583.9,-140 564.1,-255 646,-255"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-142C581.93,-139.66 562.12,-254.66 646,-257"/>
|
||||||
|
</g>
|
||||||
|
<!-- F3--C3 -->
|
||||||
|
<g id="edge21" class="edge">
|
||||||
|
<title>F3:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-138C576.19,-140.18 567.82,-47.18 646,-45"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M502,-140C578.19,-140 569.81,-47 646,-47"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-142C580.18,-139.82 571.81,-46.82 646,-49"/>
|
||||||
|
</g>
|
||||||
|
<!-- F4 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>F4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="502,-104.5 454,-104.5 454,-81.5 502,-81.5 502,-104.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="454,-81 454,-104 502,-104 502,-81 454,-81"/>
|
||||||
|
<text text-anchor="start" x="458" y="-88.8" font-family="arial" font-size="14.00">ferrule</text>
|
||||||
|
</g>
|
||||||
|
<!-- F4--C2 -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>F4:e--C2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-91C592.28,-93.46 559.61,-230.46 646,-228"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M502,-93C590.34,-93 557.66,-230 646,-230"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-95C588.39,-92.54 555.72,-229.54 646,-232"/>
|
||||||
|
</g>
|
||||||
|
<!-- F4--C3 -->
|
||||||
|
<g id="edge23" class="edge">
|
||||||
|
<title>F4:e--C3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-91C571.36,-92.96 572.64,-21.96 646,-20"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M502,-93C573.36,-93 574.64,-22 646,-22"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M502,-95C575.36,-93.04 576.64,-22.04 646,-24"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="960,-360 920,-360 920,-222 960,-222 960,-360"/>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-337 920,-360 960,-360 960,-337 920,-337"/>
|
||||||
|
<text text-anchor="start" x="931" y="-344.8" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-314 920,-337 960,-337 960,-314 920,-314"/>
|
||||||
|
<text text-anchor="start" x="924" y="-321.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-291 920,-314 939,-314 939,-291 920,-291"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-298.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-291 939,-314 960,-314 960,-291 939,-291"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-298.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-268 920,-291 939,-291 939,-268 920,-268"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-275.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-268 939,-291 960,-291 960,-268 939,-268"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-275.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-245 920,-268 939,-268 939,-245 920,-245"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-252.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-245 939,-268 960,-268 960,-245 939,-245"/>
|
||||||
|
<text text-anchor="start" x="944" y="-252.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-222 920,-245 939,-245 939,-222 920,-222"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-229.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-222 939,-245 960,-245 960,-222 939,-222"/>
|
||||||
|
<text text-anchor="start" x="944" y="-229.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- X3 -->
|
||||||
|
<g id="node7" class="node">
|
||||||
|
<title>X3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="960,-152 920,-152 920,-14 960,-14 960,-152"/>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-129 920,-152 960,-152 960,-129 920,-129"/>
|
||||||
|
<text text-anchor="start" x="931" y="-136.8" font-family="arial" font-size="14.00">X3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-106 920,-129 960,-129 960,-106 920,-106"/>
|
||||||
|
<text text-anchor="start" x="924" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-83 920,-106 939,-106 939,-83 920,-83"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-83 939,-106 960,-106 960,-83 939,-83"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-90.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-60 920,-83 939,-83 939,-60 920,-60"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-60 939,-83 960,-83 960,-60 939,-60"/>
|
||||||
|
<text text-anchor="start" x="944.5" y="-67.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-37 920,-60 939,-60 939,-37 920,-37"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-37 939,-60 960,-60 960,-37 939,-37"/>
|
||||||
|
<text text-anchor="start" x="944" y="-44.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="920,-14 920,-37 939,-37 939,-14 920,-14"/>
|
||||||
|
<text text-anchor="start" x="925.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="939,-14 939,-37 960,-37 960,-14 939,-14"/>
|
||||||
|
<text text-anchor="start" x="944" y="-21.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>C1:e--F1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-199C377.53,-200.28 390.21,-233.28 454,-232"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M310,-201C375.66,-201 388.34,-234 454,-234"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-203C373.79,-201.72 386.47,-234.72 454,-236"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F2 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>C1:e--F2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-174C375.34,-174.36 390.96,-185.36 454,-185"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M310,-176C374.19,-176 389.81,-187 454,-187"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-178C373.04,-177.64 388.66,-188.64 454,-189"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F3 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>C1:e--F3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-149C373.04,-149.36 388.66,-138.36 454,-138"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M310,-151C374.19,-151 389.81,-140 454,-140"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-153C375.34,-152.64 390.96,-141.64 454,-142"/>
|
||||||
|
</g>
|
||||||
|
<!-- C1--F4 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>C1:e--F4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-124C373.79,-125.28 386.47,-92.28 454,-91"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M310,-126C375.66,-126 388.34,-93 454,-93"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M310,-128C377.53,-126.72 390.21,-93.72 454,-95"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-303C839.76,-303.02 855.75,-301.02 920,-301"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M776,-305C840.01,-305 855.99,-303 920,-303"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-307C840.25,-306.98 856.24,-304.98 920,-305"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-278C839.88,-278 855.87,-277 920,-277"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M776,-280C840,-280 856,-279 920,-279"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-282C840.13,-282 856.12,-281 920,-281"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-253C840.13,-253 856.12,-254 920,-254"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M776,-255C840,-255 856,-256 920,-256"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-257C839.88,-257 855.87,-258 920,-258"/>
|
||||||
|
</g>
|
||||||
|
<!-- C2--X2 -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>C2:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-228C840.38,-228.03 856.36,-231.03 920,-231"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M776,-230C840.01,-230 855.99,-233 920,-233"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-232C839.64,-231.97 855.62,-234.97 920,-235"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge18" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-95C839.76,-95.02 855.75,-93.02 920,-93"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M776,-97C840.01,-97 855.99,-95 920,-95"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-99C840.25,-98.98 856.24,-96.98 920,-97"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge20" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-70C839.88,-70 855.87,-69 920,-69"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M776,-72C840,-72 856,-71 920,-71"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-74C840.13,-74 856.12,-73 920,-73"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge22" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-45C840.13,-45 856.12,-46 920,-46"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M776,-47C840,-47 856,-48 920,-48"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-49C839.88,-49 855.87,-50 920,-50"/>
|
||||||
|
</g>
|
||||||
|
<!-- C3--X3 -->
|
||||||
|
<g id="edge24" class="edge">
|
||||||
|
<title>C3:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-20C840.38,-20.03 856.36,-23.03 920,-23"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M776,-22C840.01,-22 855.99,-25 920,-25"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M776,-24C839.64,-23.97 855.62,-26.97 920,-27"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 25 KiB |
8
examples/ex14.bom.tsv
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Id Description Qty Unit Designators
|
||||||
|
1 Cable, 1 wires 0.1 m
|
||||||
|
2 Cable, 4 wires 0.4 m W1, W2, W21, W3
|
||||||
|
3 Connector, Ferrule, GY 4
|
||||||
|
4 Connector, JST SM, female, 4 pins 1 X2
|
||||||
|
5 Connector, JST SM, male, 4 pins 2 X1, X3
|
||||||
|
6 Connector, Screw terminal connector, 4 pins, GN 1 X4
|
||||||
|
7 Connector, Splice, CU 8
|
||||||
|
717
examples/ex14.gv
generated
Normal file
@ -0,0 +1,717 @@
|
|||||||
|
graph {
|
||||||
|
// Graph generated by WireViz 0.4-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=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">JST SM</td>
|
||||||
|
<td balign="left">male</td>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td>A</td>
|
||||||
|
<td port="p1r">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>B</td>
|
||||||
|
<td port="p2r">2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>C</td>
|
||||||
|
<td port="p3r">3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>D</td>
|
||||||
|
<td port="p4r">4</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
S1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_5 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_6 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_S_7 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Splice</td>
|
||||||
|
<td balign="left">CU</td>
|
||||||
|
<td balign="left" bgcolor="#D6775E" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">JST SM</td>
|
||||||
|
<td balign="left">female</td>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
<td>A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
<td>B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
<td>C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
<td>D</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X3</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">JST SM</td>
|
||||||
|
<td balign="left">male</td>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td>A</td>
|
||||||
|
<td port="p1r">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>B</td>
|
||||||
|
<td port="p2r">2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>C</td>
|
||||||
|
<td port="p3r">3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>D</td>
|
||||||
|
<td port="p4r">4</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Ferrule</td>
|
||||||
|
<td balign="left">GY</td>
|
||||||
|
<td balign="left" bgcolor="#999999" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
X4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">X4</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Screw terminal connector</td>
|
||||||
|
<td balign="left">4-pin</td>
|
||||||
|
<td balign="left">GN</td>
|
||||||
|
<td balign="left" bgcolor="#00FF00" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1">
|
||||||
|
<tr>
|
||||||
|
<td port="p1l">1</td>
|
||||||
|
<td>W</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p2l">2</td>
|
||||||
|
<td>X</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p3l">3</td>
|
||||||
|
<td>Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td port="p4l">4</td>
|
||||||
|
<td>Z</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
X1:p4r:e -- W1:w1:w
|
||||||
|
W1:w1:e -- AUTOGENERATED_S_1:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
X1:p3r:e -- W1:w2:w
|
||||||
|
W1:w2:e -- AUTOGENERATED_S_2:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
X1:p2r:e -- W1:w3:w
|
||||||
|
W1:w3:e -- S1:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
X1:p1r:e -- W1:w4:w
|
||||||
|
W1:w4:e -- AUTOGENERATED_S_3:w
|
||||||
|
W1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W1</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.1 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:4:D</td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:3:C</td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:2:B</td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X1:1:A</td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
AUTOGENERATED_S_1:e -- W2:w1:w
|
||||||
|
W2:w1:e -- AUTOGENERATED_S_4:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
AUTOGENERATED_S_2:e -- W2:w2:w
|
||||||
|
W2:w2:e -- AUTOGENERATED_S_5:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
S1:e -- W2:w3:w
|
||||||
|
W2:w3:e -- AUTOGENERATED_S_6:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
AUTOGENERATED_S_3:e -- W2:w4:w
|
||||||
|
W2:w4:e -- AUTOGENERATED_S_7:w
|
||||||
|
W2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W2</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.1 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
AUTOGENERATED_S_4:e -- W21:w1:w
|
||||||
|
W21:w1:e -- X2:p1l:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
AUTOGENERATED_S_5:e -- W21:w2:w
|
||||||
|
W21:w2:e -- X2:p2l:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
AUTOGENERATED_S_6:e -- W21:w3:w
|
||||||
|
W21:w3:e -- X2:p3l:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
AUTOGENERATED_S_7:e -- W21:w4:w
|
||||||
|
W21:w4:e -- X2:p4l:w
|
||||||
|
W21 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W21</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.1 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td>X2:1:A</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td>X2:2:B</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td>X2:3:C</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td>X2:4:D</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#ffffff:#000000"]
|
||||||
|
X3:p1r:e -- W3:w1:w
|
||||||
|
W3:w1:e -- AUTOGENERATED_F_1:w
|
||||||
|
edge [color="#000000:#895956:#000000"]
|
||||||
|
X3:p2r:e -- W3:w2:w
|
||||||
|
W3:w2:e -- AUTOGENERATED_F_2:w
|
||||||
|
edge [color="#000000:#00ff00:#000000"]
|
||||||
|
X3:p3r:e -- W3:w3:w
|
||||||
|
W3:w3:e -- AUTOGENERATED_F_3:w
|
||||||
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
|
X3:p4r:e -- W3:w4:w
|
||||||
|
W3:w4:e -- AUTOGENERATED_F_4:w
|
||||||
|
W3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">W3</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">4x</td>
|
||||||
|
<td balign="left">0.1 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td>X3:1:A</td>
|
||||||
|
<td>
|
||||||
|
1:WH
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffffff" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X3:2:B</td>
|
||||||
|
<td>
|
||||||
|
2:BN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w2" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#895956" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X3:3:C</td>
|
||||||
|
<td>
|
||||||
|
3:GN
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w3" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#00ff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>X3:4:D</td>
|
||||||
|
<td>
|
||||||
|
4:YE
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w4" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#ffff00" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#000000:#000000"]
|
||||||
|
S1:e -- AUTOGENERATED_WIRE_1:w1:w
|
||||||
|
AUTOGENERATED_WIRE_1:w1:e -- X2:p4l:w
|
||||||
|
AUTOGENERATED_WIRE_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">1x</td>
|
||||||
|
<td balign="left">0.1 m</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellborder="0">
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
1:BK
|
||||||
|
</td>
|
||||||
|
<td>X2:4:D</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w1" height="6">
|
||||||
|
<table cellspacing="0" cellborder="0" border="0">
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
<tr><td colspan="3" cellpadding="0" height="2" bgcolor="#000000" border="0"></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
edge [color="#000000:#000000" dir=both style=dashed]
|
||||||
|
X2:e -- X3:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_1:e -- X4:p2l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_2:e -- X4:p1l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_3:e -- X4:p4l:w
|
||||||
|
edge [color="#000000" dir=forward style=dashed]
|
||||||
|
AUTOGENERATED_F_4:e -- X4:p3l:w
|
||||||
|
}
|
||||||
777
examples/ex14.html
generated
Normal file
@ -0,0 +1,777 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
|
<title>ex14</title>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
|
<h1>ex14</h1>
|
||||||
|
<h2>Diagram</h2>
|
||||||
|
|
||||||
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="2842pt" height="302pt"
|
||||||
|
viewBox="0.00 0.00 2842.00 302.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 298)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-298 2838,-298 2838,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="137,-229 0,-229 0,-91 137,-91 137,-229"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-206 0.5,-229 137.5,-229 137.5,-206 0.5,-206"/>
|
||||||
|
<text text-anchor="start" x="60" y="-213.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-183 0.5,-206 58.5,-206 58.5,-183 0.5,-183"/>
|
||||||
|
<text text-anchor="start" x="4.5" y="-190.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="58.5,-183 58.5,-206 97.5,-206 97.5,-183 58.5,-183"/>
|
||||||
|
<text text-anchor="start" x="62.5" y="-190.8" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="97.5,-183 97.5,-206 137.5,-206 137.5,-183 97.5,-183"/>
|
||||||
|
<text text-anchor="start" x="101.5" y="-190.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-160 0.5,-183 70.5,-183 70.5,-160 0.5,-160"/>
|
||||||
|
<text text-anchor="start" x="30.5" y="-167.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-160 70.5,-183 137.5,-183 137.5,-160 70.5,-160"/>
|
||||||
|
<text text-anchor="start" x="100" y="-167.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-137 0.5,-160 70.5,-160 70.5,-137 0.5,-137"/>
|
||||||
|
<text text-anchor="start" x="30.5" y="-144.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-137 70.5,-160 137.5,-160 137.5,-137 70.5,-137"/>
|
||||||
|
<text text-anchor="start" x="100" y="-144.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-114 0.5,-137 70.5,-137 70.5,-114 0.5,-114"/>
|
||||||
|
<text text-anchor="start" x="30" y="-121.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-114 70.5,-137 137.5,-137 137.5,-114 70.5,-114"/>
|
||||||
|
<text text-anchor="start" x="100" y="-121.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-91 0.5,-114 70.5,-114 70.5,-91 0.5,-91"/>
|
||||||
|
<text text-anchor="start" x="30" y="-98.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-91 70.5,-114 137.5,-114 137.5,-91 70.5,-91"/>
|
||||||
|
<text text-anchor="start" x="100" y="-98.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node17" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="407,-261 281,-261 281,-77 407,-77 407,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="281,-238 281,-261 407,-261 407,-238 281,-238"/>
|
||||||
|
<text text-anchor="start" x="333.5" y="-245.8" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="281,-215 281,-238 334,-238 334,-215 281,-215"/>
|
||||||
|
<text text-anchor="start" x="300" y="-222.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="334,-215 334,-238 407,-238 407,-215 334,-215"/>
|
||||||
|
<text text-anchor="start" x="352.5" y="-222.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="302.5" y="-201.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="283" y="-182.8" font-family="arial" font-size="14.00">X1:4:D</text>
|
||||||
|
<text text-anchor="start" x="330" y="-182.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-175 281,-177 407,-177 407,-175 281,-175"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="281,-173 281,-175 407,-175 407,-173 281,-173"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-171 281,-173 407,-173 407,-171 281,-171"/>
|
||||||
|
<text text-anchor="start" x="283" y="-157.8" font-family="arial" font-size="14.00">X1:3:C</text>
|
||||||
|
<text text-anchor="start" x="332" y="-157.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-150 281,-152 407,-152 407,-150 281,-150"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="281,-148 281,-150 407,-150 407,-148 281,-148"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-146 281,-148 407,-148 407,-146 281,-146"/>
|
||||||
|
<text text-anchor="start" x="283" y="-132.8" font-family="arial" font-size="14.00">X1:2:B</text>
|
||||||
|
<text text-anchor="start" x="331.5" y="-132.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-125 281,-127 407,-127 407,-125 281,-125"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="281,-123 281,-125 407,-125 407,-123 281,-123"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-121 281,-123 407,-123 407,-121 281,-121"/>
|
||||||
|
<text text-anchor="start" x="283" y="-107.8" font-family="arial" font-size="14.00">X1:1:A</text>
|
||||||
|
<text text-anchor="start" x="332.5" y="-107.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-100 281,-102 407,-102 407,-100 281,-100"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="281,-98 281,-100 407,-100 407,-98 281,-98"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-96 281,-98 407,-98 407,-96 281,-96"/>
|
||||||
|
<text text-anchor="start" x="302.5" y="-82.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-100C210.55,-101.98 211.45,-173.98 281,-172"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M137,-102C208.55,-102 209.45,-174 281,-174"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-104C206.55,-102.02 207.45,-174.02 281,-176"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-123C203.6,-123.98 217.84,-147.98 281,-147"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M137,-125C201.88,-125 216.12,-149 281,-149"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-127C200.16,-126.02 214.4,-150.02 281,-151"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-146C200.16,-146.98 214.4,-122.98 281,-122"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M137,-148C201.88,-148 216.12,-124 281,-124"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-150C203.6,-149.02 217.84,-125.02 281,-126"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-170C206.75,-171.99 207.25,-98.99 281,-97"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M137,-172C208.75,-172 209.25,-99 281,-99"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-174C210.75,-172.01 211.25,-99.01 281,-101"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_1 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>AUTOGENERATED_S_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-218.5 551,-218.5 551,-195.5 635,-195.5 635,-218.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-195 551,-218 598,-218 598,-195 551,-195"/>
|
||||||
|
<text text-anchor="start" x="555" y="-202.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-195 598,-218 627,-218 627,-195 598,-195"/>
|
||||||
|
<text text-anchor="start" x="602" y="-202.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-195 627,-218 635,-218 635,-195 627,-195"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-195 627,-218 635,-218 635,-195 627,-195"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2 -->
|
||||||
|
<g id="node18" class="node">
|
||||||
|
<title>W2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="866,-272 779,-272 779,-88 866,-88 866,-272"/>
|
||||||
|
<polygon fill="none" stroke="black" points="779.5,-249 779.5,-272 866.5,-272 866.5,-249 779.5,-249"/>
|
||||||
|
<text text-anchor="start" x="812.5" y="-256.8" font-family="arial" font-size="14.00">W2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="779.5,-226 779.5,-249 812.5,-249 812.5,-226 779.5,-226"/>
|
||||||
|
<text text-anchor="start" x="788.5" y="-233.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="812.5,-226 812.5,-249 866.5,-249 866.5,-226 812.5,-226"/>
|
||||||
|
<text text-anchor="start" x="821.5" y="-233.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="781.5" y="-212.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="789.5" y="-193.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-186 779.5,-188 866.5,-188 866.5,-186 779.5,-186"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="779.5,-184 779.5,-186 866.5,-186 866.5,-184 779.5,-184"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-182 779.5,-184 866.5,-184 866.5,-182 779.5,-182"/>
|
||||||
|
<text text-anchor="start" x="791.5" y="-168.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-161 779.5,-163 866.5,-163 866.5,-161 779.5,-161"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="779.5,-159 779.5,-161 866.5,-161 866.5,-159 779.5,-159"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-157 779.5,-159 866.5,-159 866.5,-157 779.5,-157"/>
|
||||||
|
<text text-anchor="start" x="791" y="-143.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-136 779.5,-138 866.5,-138 866.5,-136 779.5,-136"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="779.5,-134 779.5,-136 866.5,-136 866.5,-134 779.5,-134"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-132 779.5,-134 866.5,-134 866.5,-132 779.5,-132"/>
|
||||||
|
<text text-anchor="start" x="792" y="-118.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-111 779.5,-113 866.5,-113 866.5,-111 779.5,-111"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="779.5,-109 779.5,-111 866.5,-111 866.5,-109 779.5,-109"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-107 779.5,-109 866.5,-109 866.5,-107 779.5,-107"/>
|
||||||
|
<text text-anchor="start" x="781.5" y="-93.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_1--W2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_1:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-205C698.07,-205.9 712.59,-183.9 779,-183"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M635,-207C699.74,-207 714.26,-185 779,-185"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-209C701.41,-208.1 715.93,-186.1 779,-187"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_S_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-171.5 551,-171.5 551,-148.5 635,-148.5 635,-171.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-148 551,-171 598,-171 598,-148 551,-148"/>
|
||||||
|
<text text-anchor="start" x="555" y="-155.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-148 598,-171 627,-171 627,-148 598,-148"/>
|
||||||
|
<text text-anchor="start" x="602" y="-155.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-148 627,-171 635,-171 635,-148 627,-148"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-148 627,-171 635,-171 635,-148 627,-148"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_2--W2 -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-158C699,-158 715,-158 779,-158"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M635,-160C699,-160 715,-160 779,-160"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-162C699,-162 715,-162 779,-162"/>
|
||||||
|
</g>
|
||||||
|
<!-- S1 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>S1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-124.5 551,-124.5 551,-101.5 635,-101.5 635,-124.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-101 551,-124 598,-124 598,-101 551,-101"/>
|
||||||
|
<text text-anchor="start" x="555" y="-108.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-101 598,-124 627,-124 627,-101 598,-101"/>
|
||||||
|
<text text-anchor="start" x="602" y="-108.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-101 627,-124 635,-124 635,-101 627,-101"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-101 627,-124 635,-124 635,-101 627,-101"/>
|
||||||
|
</g>
|
||||||
|
<!-- S1--W2 -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>S1:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-111C701.41,-111.9 715.93,-133.9 779,-133"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M635,-113C699.74,-113 714.26,-135 779,-135"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-115C698.07,-114.1 712.59,-136.1 779,-137"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_WIRE_1 -->
|
||||||
|
<g id="node21" class="node">
|
||||||
|
<title>AUTOGENERATED_WIRE_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1365.5,-86 1240.5,-86 1240.5,0 1365.5,0 1365.5,-86"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1241,-63 1241,-86 1293,-86 1293,-63 1241,-63"/>
|
||||||
|
<text text-anchor="start" x="1259.5" y="-70.8" font-family="arial" font-size="14.00">1x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1293,-63 1293,-86 1366,-86 1366,-63 1293,-63"/>
|
||||||
|
<text text-anchor="start" x="1311.5" y="-70.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="1243" y="-49.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="1251" y="-30.8" font-family="arial" font-size="14.00">     1:BK    </text>
|
||||||
|
<text text-anchor="start" x="1321" y="-30.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-23 1241,-25 1366,-25 1366,-23 1241,-23"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-21 1241,-23 1366,-23 1366,-21 1241,-21"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-19 1241,-21 1366,-21 1366,-19 1241,-19"/>
|
||||||
|
<text text-anchor="start" x="1243" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- S1--AUTOGENERATED_WIRE_1 -->
|
||||||
|
<g id="edge33" class="edge">
|
||||||
|
<title>S1:e--AUTOGENERATED_WIRE_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-111C699.3,-112.08 712.26,-87.17 778.63,-74.03 981.21,-36.34 1033.11,-20.09 1240,-20"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-113C701.08,-113 714.04,-88.09 779,-76 981.81,-38.25 1033.71,-22 1240,-22"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-115C702.85,-113.92 715.81,-89.02 779.37,-77.97 982.4,-40.15 1034.31,-23.91 1240,-24"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_3 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>AUTOGENERATED_S_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-77.5 551,-77.5 551,-54.5 635,-54.5 635,-77.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-54 551,-77 598,-77 598,-54 551,-54"/>
|
||||||
|
<text text-anchor="start" x="555" y="-61.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-54 598,-77 627,-77 627,-54 598,-54"/>
|
||||||
|
<text text-anchor="start" x="602" y="-61.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-54 627,-77 635,-77 635,-54 627,-54"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-54 627,-77 635,-77 635,-54 627,-54"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_3--W2 -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_3:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-64C703.87,-65.55 714.03,-109.55 779,-108"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M635,-66C701.92,-66 712.08,-110 779,-110"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-68C699.97,-66.45 710.13,-110.45 779,-112"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_4 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>AUTOGENERATED_S_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-240.5 1010,-240.5 1010,-217.5 1094,-217.5 1094,-240.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-217 1010,-240 1057,-240 1057,-217 1010,-217"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-224.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-217 1057,-240 1086,-240 1086,-217 1057,-217"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-224.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-217 1086,-240 1094,-240 1094,-217 1086,-217"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-217 1086,-240 1094,-240 1094,-217 1086,-217"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21 -->
|
||||||
|
<g id="node19" class="node">
|
||||||
|
<title>W21</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1368,-294 1238,-294 1238,-110 1368,-110 1368,-294"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1238,-271 1238,-294 1368,-294 1368,-271 1238,-271"/>
|
||||||
|
<text text-anchor="start" x="1288.5" y="-278.8" font-family="arial" font-size="14.00">W21</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1238,-248 1238,-271 1293,-271 1293,-248 1238,-248"/>
|
||||||
|
<text text-anchor="start" x="1258" y="-255.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1293,-248 1293,-271 1368,-271 1368,-248 1293,-248"/>
|
||||||
|
<text text-anchor="start" x="1312.5" y="-255.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="1240" y="-234.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="1248" y="-215.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-215.8" font-family="arial" font-size="14.00">X2:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-208 1238,-210 1368,-210 1368,-208 1238,-208"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="1238,-206 1238,-208 1368,-208 1368,-206 1238,-206"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-204 1238,-206 1368,-206 1368,-204 1238,-204"/>
|
||||||
|
<text text-anchor="start" x="1250" y="-190.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-190.8" font-family="arial" font-size="14.00">X2:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-183 1238,-185 1368,-185 1368,-183 1238,-183"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="1238,-181 1238,-183 1368,-183 1368,-181 1238,-181"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-179 1238,-181 1368,-181 1368,-179 1238,-179"/>
|
||||||
|
<text text-anchor="start" x="1249.5" y="-165.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-165.8" font-family="arial" font-size="14.00">X2:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-158 1238,-160 1368,-160 1368,-158 1238,-158"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="1238,-156 1238,-158 1368,-158 1368,-156 1238,-156"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-154 1238,-156 1368,-156 1368,-154 1238,-154"/>
|
||||||
|
<text text-anchor="start" x="1250.5" y="-140.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-140.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-133 1238,-135 1368,-135 1368,-133 1238,-133"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="1238,-131 1238,-133 1368,-133 1368,-131 1238,-131"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-129 1238,-131 1368,-131 1368,-129 1238,-129"/>
|
||||||
|
<text text-anchor="start" x="1240" y="-115.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_4--W21 -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_4:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-227C1157.07,-227.9 1171.59,-205.9 1238,-205"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1094,-229C1158.74,-229 1173.26,-207 1238,-207"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-231C1160.41,-230.1 1174.93,-208.1 1238,-209"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_5 -->
|
||||||
|
<g id="node7" class="node">
|
||||||
|
<title>AUTOGENERATED_S_5</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-193.5 1010,-193.5 1010,-170.5 1094,-170.5 1094,-193.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-170 1010,-193 1057,-193 1057,-170 1010,-170"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-177.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-170 1057,-193 1086,-193 1086,-170 1057,-170"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-177.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-170 1086,-193 1094,-193 1094,-170 1086,-170"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-170 1086,-193 1094,-193 1094,-170 1086,-170"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_5--W21 -->
|
||||||
|
<g id="edge19" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_5:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-180C1158,-180 1174,-180 1238,-180"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1094,-182C1158,-182 1174,-182 1238,-182"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-184C1158,-184 1174,-184 1238,-184"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_6 -->
|
||||||
|
<g id="node8" class="node">
|
||||||
|
<title>AUTOGENERATED_S_6</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-146.5 1010,-146.5 1010,-123.5 1094,-123.5 1094,-146.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-123 1010,-146 1057,-146 1057,-123 1010,-123"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-130.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-123 1057,-146 1086,-146 1086,-123 1057,-123"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-130.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-123 1086,-146 1094,-146 1094,-123 1086,-123"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-123 1086,-146 1094,-146 1094,-123 1086,-123"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_6--W21 -->
|
||||||
|
<g id="edge21" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_6:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-133C1160.41,-133.9 1174.93,-155.9 1238,-155"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1094,-135C1158.74,-135 1173.26,-157 1238,-157"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-137C1157.07,-136.1 1171.59,-158.1 1238,-159"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_7 -->
|
||||||
|
<g id="node9" class="node">
|
||||||
|
<title>AUTOGENERATED_S_7</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-99.5 1010,-99.5 1010,-76.5 1094,-76.5 1094,-99.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-76 1010,-99 1057,-99 1057,-76 1010,-76"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-83.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-76 1057,-99 1086,-99 1086,-76 1057,-76"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-83.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-76 1086,-99 1094,-99 1094,-76 1086,-76"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-76 1086,-99 1094,-99 1094,-76 1086,-76"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_7--W21 -->
|
||||||
|
<g id="edge23" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_7:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-86C1162.87,-87.55 1173.03,-131.55 1238,-130"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1094,-88C1160.92,-88 1171.08,-132 1238,-132"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-90C1158.97,-88.45 1169.13,-132.45 1238,-134"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node10" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1661,-261 1512,-261 1512,-123 1661,-123 1661,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-238 1512.5,-261 1661.5,-261 1661.5,-238 1512.5,-238"/>
|
||||||
|
<text text-anchor="start" x="1578" y="-245.8" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-215 1512.5,-238 1570.5,-238 1570.5,-215 1512.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1516.5" y="-222.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1570.5,-215 1570.5,-238 1621.5,-238 1621.5,-215 1570.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1574.5" y="-222.8" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1621.5,-215 1621.5,-238 1661.5,-238 1661.5,-215 1621.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1625.5" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-192 1512.5,-215 1585.5,-215 1585.5,-192 1512.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-192 1585.5,-215 1661.5,-215 1661.5,-192 1585.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1618.5" y="-199.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-169 1512.5,-192 1585.5,-192 1585.5,-169 1512.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-169 1585.5,-192 1661.5,-192 1661.5,-169 1585.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1618.5" y="-176.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-146 1512.5,-169 1585.5,-169 1585.5,-146 1512.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-146 1585.5,-169 1661.5,-169 1661.5,-146 1585.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1618" y="-153.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-123 1512.5,-146 1585.5,-146 1585.5,-123 1512.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-123 1585.5,-146 1661.5,-146 1661.5,-123 1585.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1618" y="-130.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- X3 -->
|
||||||
|
<g id="node11" class="node">
|
||||||
|
<title>X3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1942,-261 1805,-261 1805,-123 1942,-123 1942,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-238 1805.5,-261 1942.5,-261 1942.5,-238 1805.5,-238"/>
|
||||||
|
<text text-anchor="start" x="1865" y="-245.8" font-family="arial" font-size="14.00">X3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-215 1805.5,-238 1863.5,-238 1863.5,-215 1805.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1809.5" y="-222.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1863.5,-215 1863.5,-238 1902.5,-238 1902.5,-215 1863.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1867.5" y="-222.8" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1902.5,-215 1902.5,-238 1942.5,-238 1942.5,-215 1902.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1906.5" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-192 1805.5,-215 1875.5,-215 1875.5,-192 1805.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1835.5" y="-199.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-192 1875.5,-215 1942.5,-215 1942.5,-192 1875.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-169 1805.5,-192 1875.5,-192 1875.5,-169 1805.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1835.5" y="-176.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-169 1875.5,-192 1942.5,-192 1942.5,-169 1875.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-146 1805.5,-169 1875.5,-169 1875.5,-146 1805.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1835" y="-153.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-146 1875.5,-169 1942.5,-169 1942.5,-146 1875.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-123 1805.5,-146 1875.5,-146 1875.5,-123 1805.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1835" y="-130.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-123 1875.5,-146 1942.5,-146 1942.5,-123 1875.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- X2--X3 -->
|
||||||
|
<g id="edge35" class="edge">
|
||||||
|
<title>X2:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1671.09,-191C1723.62,-191 1742.31,-191 1794.79,-191"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1671.09,-193C1723.62,-193 1742.31,-193 1794.79,-193"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="1671,-188.5 1661,-192 1671,-195.5 1671,-188.5"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="1795,-195.5 1805,-192 1795,-188.5 1795,-195.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3 -->
|
||||||
|
<g id="node20" class="node">
|
||||||
|
<title>W3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2212,-293 2086,-293 2086,-109 2212,-109 2212,-293"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2086,-270 2086,-293 2212,-293 2212,-270 2086,-270"/>
|
||||||
|
<text text-anchor="start" x="2138.5" y="-277.8" font-family="arial" font-size="14.00">W3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2086,-247 2086,-270 2139,-270 2139,-247 2086,-247"/>
|
||||||
|
<text text-anchor="start" x="2105" y="-254.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2139,-247 2139,-270 2212,-270 2212,-247 2139,-247"/>
|
||||||
|
<text text-anchor="start" x="2157.5" y="-254.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="2107.5" y="-233.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="2088" y="-214.8" font-family="arial" font-size="14.00">X3:1:A</text>
|
||||||
|
<text text-anchor="start" x="2135" y="-214.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-207 2086,-209 2212,-209 2212,-207 2086,-207"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="2086,-205 2086,-207 2212,-207 2212,-205 2086,-205"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-203 2086,-205 2212,-205 2212,-203 2086,-203"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-189.8" font-family="arial" font-size="14.00">X3:2:B</text>
|
||||||
|
<text text-anchor="start" x="2137" y="-189.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-182 2086,-184 2212,-184 2212,-182 2086,-182"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="2086,-180 2086,-182 2212,-182 2212,-180 2086,-180"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-178 2086,-180 2212,-180 2212,-178 2086,-178"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-164.8" font-family="arial" font-size="14.00">X3:3:C</text>
|
||||||
|
<text text-anchor="start" x="2136.5" y="-164.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-157 2086,-159 2212,-159 2212,-157 2086,-157"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="2086,-155 2086,-157 2212,-157 2212,-155 2086,-155"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-153 2086,-155 2212,-155 2212,-153 2086,-153"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-139.8" font-family="arial" font-size="14.00">X3:4:D</text>
|
||||||
|
<text text-anchor="start" x="2137.5" y="-139.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-132 2086,-134 2212,-134 2212,-132 2086,-132"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="2086,-130 2086,-132 2212,-132 2212,-130 2086,-130"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-128 2086,-130 2212,-130 2212,-128 2086,-128"/>
|
||||||
|
<text text-anchor="start" x="2107.5" y="-114.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge25" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-202C2006.25,-202.02 2022.24,-204.02 2086,-204"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1942,-204C2006.01,-204 2021.99,-206 2086,-206"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-206C2005.76,-205.98 2021.75,-207.98 2086,-208"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge27" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-178C2006.13,-178 2022.12,-179 2086,-179"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1942,-180C2006,-180 2022,-181 2086,-181"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-182C2005.88,-182 2021.87,-183 2086,-183"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge29" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-155C2005.88,-155 2021.87,-154 2086,-154"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1942,-157C2006,-157 2022,-156 2086,-156"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-159C2006.13,-159 2022.12,-158 2086,-158"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge31" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-132C2005.64,-132.03 2021.62,-129.03 2086,-129"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1942,-134C2006.01,-134 2021.99,-131 2086,-131"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-136C2006.38,-135.97 2022.36,-132.97 2086,-133"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
|
<g id="node12" class="node">
|
||||||
|
<title>AUTOGENERATED_F_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-203.5 2356,-203.5 2356,-180.5 2446,-180.5 2446,-203.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-180 2356,-203 2409,-203 2409,-180 2356,-180"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-187.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-180 2409,-203 2438,-203 2438,-180 2409,-180"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-187.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-180 2438,-203 2446,-203 2446,-180 2438,-180"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-180 2438,-203 2446,-203 2446,-180 2438,-180"/>
|
||||||
|
</g>
|
||||||
|
<!-- X4 -->
|
||||||
|
<g id="node16" class="node">
|
||||||
|
<title>X4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2834,-261 2590,-261 2590,-123 2834,-123 2834,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-238 2590,-261 2834,-261 2834,-238 2590,-238"/>
|
||||||
|
<text text-anchor="start" x="2703" y="-245.8" font-family="arial" font-size="14.00">X4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-215 2590,-238 2756,-238 2756,-215 2590,-215"/>
|
||||||
|
<text text-anchor="start" x="2594" y="-222.8" font-family="arial" font-size="14.00">Screw terminal connector</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2756,-215 2756,-238 2796,-238 2796,-215 2756,-215"/>
|
||||||
|
<text text-anchor="start" x="2760" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2796,-215 2796,-238 2826,-238 2826,-215 2796,-215"/>
|
||||||
|
<text text-anchor="start" x="2800" y="-222.8" font-family="arial" font-size="14.00">GN</text>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="2826,-215 2826,-238 2834,-238 2834,-215 2826,-215"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2826,-215 2826,-238 2834,-238 2834,-215 2826,-215"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-192 2590,-215 2709,-215 2709,-192 2590,-192"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-192 2709,-215 2834,-215 2834,-192 2709,-192"/>
|
||||||
|
<text text-anchor="start" x="2764.5" y="-199.8" font-family="arial" font-size="14.00">W</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-169 2590,-192 2709,-192 2709,-169 2590,-169"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-169 2709,-192 2834,-192 2834,-169 2709,-169"/>
|
||||||
|
<text text-anchor="start" x="2766.5" y="-176.8" font-family="arial" font-size="14.00">X</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-146 2590,-169 2709,-169 2709,-146 2590,-146"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-146 2709,-169 2834,-169 2834,-146 2709,-146"/>
|
||||||
|
<text text-anchor="start" x="2766.5" y="-153.8" font-family="arial" font-size="14.00">Y</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-123 2590,-146 2709,-146 2709,-123 2590,-123"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-123 2709,-146 2834,-146 2834,-123 2709,-123"/>
|
||||||
|
<text text-anchor="start" x="2767" y="-130.8" font-family="arial" font-size="14.00">Z</text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1--X4 -->
|
||||||
|
<g id="edge36" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_1:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-192C2506.71,-192 2523.93,-181.28 2579.88,-180.1"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2580.04,-183.6 2590,-180 2579.96,-176.6 2580.04,-183.6"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
|
<g id="node13" class="node">
|
||||||
|
<title>AUTOGENERATED_F_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-250.5 2356,-250.5 2356,-227.5 2446,-227.5 2446,-250.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-227 2356,-250 2409,-250 2409,-227 2356,-227"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-234.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-227 2409,-250 2438,-250 2438,-227 2409,-227"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-234.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-227 2438,-250 2446,-250 2446,-227 2438,-227"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-227 2438,-250 2446,-250 2446,-227 2438,-227"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2--X4 -->
|
||||||
|
<g id="edge37" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_2:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-239C2508.26,-239 2522.63,-207.72 2579.66,-204.3"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2580.11,-207.79 2590,-204 2579.9,-200.79 2580.11,-207.79"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
|
<g id="node14" class="node">
|
||||||
|
<title>AUTOGENERATED_F_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-109.5 2356,-109.5 2356,-86.5 2446,-86.5 2446,-109.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-86 2356,-109 2409,-109 2409,-86 2356,-86"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-93.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-86 2409,-109 2438,-109 2438,-86 2409,-86"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-93.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-86 2438,-109 2446,-109 2446,-86 2438,-86"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-86 2438,-109 2446,-109 2446,-86 2438,-86"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3--X4 -->
|
||||||
|
<g id="edge38" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_3:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-98C2508.49,-98 2522.61,-130.3 2580,-133.71"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2579.9,-137.21 2590,-134 2580.11,-130.21 2579.9,-137.21"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
|
<g id="node15" class="node">
|
||||||
|
<title>AUTOGENERATED_F_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-156.5 2356,-156.5 2356,-133.5 2446,-133.5 2446,-156.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-133 2356,-156 2409,-156 2409,-133 2356,-133"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-140.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-133 2409,-156 2438,-156 2438,-133 2409,-133"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-140.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-133 2438,-156 2446,-156 2446,-133 2438,-133"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-133 2438,-156 2446,-156 2446,-133 2438,-133"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4--X4 -->
|
||||||
|
<g id="edge39" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_4:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-145C2506.71,-145 2523.93,-155.72 2579.88,-156.9"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2579.96,-160.4 2590,-157 2580.04,-153.4 2579.96,-160.4"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-172C474.53,-173.28 487.21,-206.28 551,-205"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M407,-174C472.66,-174 485.34,-207 551,-207"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-176C470.79,-174.72 483.47,-207.72 551,-209"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_2 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-147C472.34,-147.36 487.96,-158.36 551,-158"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M407,-149C471.19,-149 486.81,-160 551,-160"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-151C470.04,-150.64 485.66,-161.64 551,-162"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--S1 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>W1:e--S1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-122C470.04,-122.36 485.66,-111.36 551,-111"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M407,-124C471.19,-124 486.81,-113 551,-113"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-126C472.34,-125.64 487.96,-114.64 551,-115"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_3 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-97C470.79,-98.28 483.47,-65.28 551,-64"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M407,-99C472.66,-99 485.34,-66 551,-66"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-101C474.53,-99.72 487.21,-66.72 551,-68"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_4 -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-183C934.87,-184.55 945.03,-228.55 1010,-227"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M866,-185C932.92,-185 943.08,-229 1010,-229"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-187C930.97,-185.45 941.13,-229.45 1010,-231"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_5 -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_5:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-158C932.41,-158.9 946.93,-180.9 1010,-180"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M866,-160C930.74,-160 945.26,-182 1010,-182"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-162C929.07,-161.1 943.59,-183.1 1010,-184"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_6 -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_6:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-133C930,-133 946,-133 1010,-133"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M866,-135C930,-135 946,-135 1010,-135"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-137C930,-137 946,-137 1010,-137"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_7 -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_7:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-108C929.07,-108.9 943.59,-86.9 1010,-86"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M866,-110C930.74,-110 945.26,-88 1010,-88"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-112C932.41,-111.1 946.93,-89.1 1010,-90"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge18" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-205C1431.64,-205.03 1447.62,-202.03 1512,-202"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1368,-207C1432.01,-207 1447.99,-204 1512,-204"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-209C1432.38,-208.97 1448.36,-205.97 1512,-206"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge20" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-180C1431.76,-180.02 1447.75,-178.02 1512,-178"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1368,-182C1432.01,-182 1447.99,-180 1512,-180"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-184C1432.25,-183.98 1448.24,-181.98 1512,-182"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge22" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-155C1432,-155 1448,-155 1512,-155"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1368,-157C1432,-157 1448,-157 1512,-157"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-159C1432,-159 1448,-159 1512,-159"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge24" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-130C1432.25,-130.02 1448.24,-132.02 1512,-132"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1368,-132C1432.01,-132 1447.99,-134 1512,-134"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-134C1431.76,-133.98 1447.75,-135.98 1512,-136"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_1 -->
|
||||||
|
<g id="edge26" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-204C2274.96,-204.52 2290.35,-190.52 2356,-190"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M2212,-206C2276.3,-206 2291.7,-192 2356,-192"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-208C2277.65,-207.48 2293.04,-193.48 2356,-194"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_2 -->
|
||||||
|
<g id="edge28" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-179C2282.99,-180.79 2288.99,-238.79 2356,-237"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M2212,-181C2281,-181 2287,-239 2356,-239"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-183C2279.01,-181.21 2285.01,-239.21 2356,-241"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_3 -->
|
||||||
|
<g id="edge30" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-154C2279.01,-155.79 2285.01,-97.79 2356,-96"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M2212,-156C2281,-156 2287,-98 2356,-98"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-158C2282.99,-156.21 2288.99,-98.21 2356,-100"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_4 -->
|
||||||
|
<g id="edge32" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-129C2277.65,-129.52 2293.04,-143.52 2356,-143"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M2212,-131C2276.3,-131 2291.7,-145 2356,-145"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-133C2274.96,-132.48 2290.35,-146.48 2356,-147"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_WIRE_1--X2 -->
|
||||||
|
<g id="edge34" class="edge">
|
||||||
|
<title>AUTOGENERATED_WIRE_1:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-20C1450.41,-22.31 1432.54,-134.31 1512,-132"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-22C1448.43,-22 1430.57,-134 1512,-134"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-24C1446.46,-21.69 1428.59,-133.69 1512,-136"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Bill of Materials</h2>
|
||||||
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
|
<tr>
|
||||||
|
<th class="bom_col_id">Id</th>
|
||||||
|
<th class="bom_col_description">Description</th>
|
||||||
|
<th class="bom_col_qty">Qty</th>
|
||||||
|
<th class="bom_col_unit">Unit</th>
|
||||||
|
<th class="bom_col_designators">Designators</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">1</td>
|
||||||
|
<td class="bom_col_description">Cable, 1 wires</td>
|
||||||
|
<td class="bom_col_qty">0.1</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">2</td>
|
||||||
|
<td class="bom_col_description">Cable, 4 wires</td>
|
||||||
|
<td class="bom_col_qty">0.4</td>
|
||||||
|
<td class="bom_col_unit">m</td>
|
||||||
|
<td class="bom_col_designators">W1, W2, W21, W3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">3</td>
|
||||||
|
<td class="bom_col_description">Connector, Ferrule, GY</td>
|
||||||
|
<td class="bom_col_qty">4</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">4</td>
|
||||||
|
<td class="bom_col_description">Connector, JST SM, female, 4 pins</td>
|
||||||
|
<td class="bom_col_qty">1</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">5</td>
|
||||||
|
<td class="bom_col_description">Connector, JST SM, male, 4 pins</td>
|
||||||
|
<td class="bom_col_qty">2</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X1, X3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">6</td>
|
||||||
|
<td class="bom_col_description">Connector, Screw terminal connector, 4 pins, GN</td>
|
||||||
|
<td class="bom_col_qty">1</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators">X4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="bom_col_id">7</td>
|
||||||
|
<td class="bom_col_description">Connector, Splice, CU</td>
|
||||||
|
<td class="bom_col_qty">8</td>
|
||||||
|
<td class="bom_col_unit"></td>
|
||||||
|
<td class="bom_col_designators"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
BIN
examples/ex14.png
generated
Normal file
|
After Width: | Height: | Size: 202 KiB |
676
examples/ex14.svg
generated
Normal file
@ -0,0 +1,676 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
|
-->
|
||||||
|
<!-- Pages: 1 -->
|
||||||
|
<svg width="2842pt" height="302pt"
|
||||||
|
viewBox="0.00 0.00 2842.00 302.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 298)">
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-298 2838,-298 2838,4 -4,4"/>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="137,-229 0,-229 0,-91 137,-91 137,-229"/>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-206 0.5,-229 137.5,-229 137.5,-206 0.5,-206"/>
|
||||||
|
<text text-anchor="start" x="60" y="-213.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-183 0.5,-206 58.5,-206 58.5,-183 0.5,-183"/>
|
||||||
|
<text text-anchor="start" x="4.5" y="-190.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="58.5,-183 58.5,-206 97.5,-206 97.5,-183 58.5,-183"/>
|
||||||
|
<text text-anchor="start" x="62.5" y="-190.8" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="97.5,-183 97.5,-206 137.5,-206 137.5,-183 97.5,-183"/>
|
||||||
|
<text text-anchor="start" x="101.5" y="-190.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-160 0.5,-183 70.5,-183 70.5,-160 0.5,-160"/>
|
||||||
|
<text text-anchor="start" x="30.5" y="-167.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-160 70.5,-183 137.5,-183 137.5,-160 70.5,-160"/>
|
||||||
|
<text text-anchor="start" x="100" y="-167.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-137 0.5,-160 70.5,-160 70.5,-137 0.5,-137"/>
|
||||||
|
<text text-anchor="start" x="30.5" y="-144.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-137 70.5,-160 137.5,-160 137.5,-137 70.5,-137"/>
|
||||||
|
<text text-anchor="start" x="100" y="-144.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-114 0.5,-137 70.5,-137 70.5,-114 0.5,-114"/>
|
||||||
|
<text text-anchor="start" x="30" y="-121.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-114 70.5,-137 137.5,-137 137.5,-114 70.5,-114"/>
|
||||||
|
<text text-anchor="start" x="100" y="-121.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="0.5,-91 0.5,-114 70.5,-114 70.5,-91 0.5,-91"/>
|
||||||
|
<text text-anchor="start" x="30" y="-98.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="70.5,-91 70.5,-114 137.5,-114 137.5,-91 70.5,-91"/>
|
||||||
|
<text text-anchor="start" x="100" y="-98.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- W1 -->
|
||||||
|
<g id="node17" class="node">
|
||||||
|
<title>W1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="407,-261 281,-261 281,-77 407,-77 407,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="281,-238 281,-261 407,-261 407,-238 281,-238"/>
|
||||||
|
<text text-anchor="start" x="333.5" y="-245.8" font-family="arial" font-size="14.00">W1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="281,-215 281,-238 334,-238 334,-215 281,-215"/>
|
||||||
|
<text text-anchor="start" x="300" y="-222.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="334,-215 334,-238 407,-238 407,-215 334,-215"/>
|
||||||
|
<text text-anchor="start" x="352.5" y="-222.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="302.5" y="-201.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="283" y="-182.8" font-family="arial" font-size="14.00">X1:4:D</text>
|
||||||
|
<text text-anchor="start" x="330" y="-182.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-175 281,-177 407,-177 407,-175 281,-175"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="281,-173 281,-175 407,-175 407,-173 281,-173"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-171 281,-173 407,-173 407,-171 281,-171"/>
|
||||||
|
<text text-anchor="start" x="283" y="-157.8" font-family="arial" font-size="14.00">X1:3:C</text>
|
||||||
|
<text text-anchor="start" x="332" y="-157.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-150 281,-152 407,-152 407,-150 281,-150"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="281,-148 281,-150 407,-150 407,-148 281,-148"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-146 281,-148 407,-148 407,-146 281,-146"/>
|
||||||
|
<text text-anchor="start" x="283" y="-132.8" font-family="arial" font-size="14.00">X1:2:B</text>
|
||||||
|
<text text-anchor="start" x="331.5" y="-132.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-125 281,-127 407,-127 407,-125 281,-125"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="281,-123 281,-125 407,-125 407,-123 281,-123"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-121 281,-123 407,-123 407,-121 281,-121"/>
|
||||||
|
<text text-anchor="start" x="283" y="-107.8" font-family="arial" font-size="14.00">X1:1:A</text>
|
||||||
|
<text text-anchor="start" x="332.5" y="-107.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-100 281,-102 407,-102 407,-100 281,-100"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="281,-98 281,-100 407,-100 407,-98 281,-98"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="281,-96 281,-98 407,-98 407,-96 281,-96"/>
|
||||||
|
<text text-anchor="start" x="302.5" y="-82.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-100C210.55,-101.98 211.45,-173.98 281,-172"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M137,-102C208.55,-102 209.45,-174 281,-174"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-104C206.55,-102.02 207.45,-174.02 281,-176"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-123C203.6,-123.98 217.84,-147.98 281,-147"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M137,-125C201.88,-125 216.12,-149 281,-149"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-127C200.16,-126.02 214.4,-150.02 281,-151"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-146C200.16,-146.98 214.4,-122.98 281,-122"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M137,-148C201.88,-148 216.12,-124 281,-124"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-150C203.6,-149.02 217.84,-125.02 281,-126"/>
|
||||||
|
</g>
|
||||||
|
<!-- X1--W1 -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>X1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-170C206.75,-171.99 207.25,-98.99 281,-97"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M137,-172C208.75,-172 209.25,-99 281,-99"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M137,-174C210.75,-172.01 211.25,-99.01 281,-101"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_1 -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>AUTOGENERATED_S_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-218.5 551,-218.5 551,-195.5 635,-195.5 635,-218.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-195 551,-218 598,-218 598,-195 551,-195"/>
|
||||||
|
<text text-anchor="start" x="555" y="-202.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-195 598,-218 627,-218 627,-195 598,-195"/>
|
||||||
|
<text text-anchor="start" x="602" y="-202.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-195 627,-218 635,-218 635,-195 627,-195"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-195 627,-218 635,-218 635,-195 627,-195"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2 -->
|
||||||
|
<g id="node18" class="node">
|
||||||
|
<title>W2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="866,-272 779,-272 779,-88 866,-88 866,-272"/>
|
||||||
|
<polygon fill="none" stroke="black" points="779.5,-249 779.5,-272 866.5,-272 866.5,-249 779.5,-249"/>
|
||||||
|
<text text-anchor="start" x="812.5" y="-256.8" font-family="arial" font-size="14.00">W2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="779.5,-226 779.5,-249 812.5,-249 812.5,-226 779.5,-226"/>
|
||||||
|
<text text-anchor="start" x="788.5" y="-233.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="812.5,-226 812.5,-249 866.5,-249 866.5,-226 812.5,-226"/>
|
||||||
|
<text text-anchor="start" x="821.5" y="-233.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="781.5" y="-212.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="789.5" y="-193.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-186 779.5,-188 866.5,-188 866.5,-186 779.5,-186"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="779.5,-184 779.5,-186 866.5,-186 866.5,-184 779.5,-184"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-182 779.5,-184 866.5,-184 866.5,-182 779.5,-182"/>
|
||||||
|
<text text-anchor="start" x="791.5" y="-168.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-161 779.5,-163 866.5,-163 866.5,-161 779.5,-161"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="779.5,-159 779.5,-161 866.5,-161 866.5,-159 779.5,-159"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-157 779.5,-159 866.5,-159 866.5,-157 779.5,-157"/>
|
||||||
|
<text text-anchor="start" x="791" y="-143.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-136 779.5,-138 866.5,-138 866.5,-136 779.5,-136"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="779.5,-134 779.5,-136 866.5,-136 866.5,-134 779.5,-134"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-132 779.5,-134 866.5,-134 866.5,-132 779.5,-132"/>
|
||||||
|
<text text-anchor="start" x="792" y="-118.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-111 779.5,-113 866.5,-113 866.5,-111 779.5,-111"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="779.5,-109 779.5,-111 866.5,-111 866.5,-109 779.5,-109"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="779.5,-107 779.5,-109 866.5,-109 866.5,-107 779.5,-107"/>
|
||||||
|
<text text-anchor="start" x="781.5" y="-93.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_1--W2 -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_1:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-205C698.07,-205.9 712.59,-183.9 779,-183"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M635,-207C699.74,-207 714.26,-185 779,-185"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-209C701.41,-208.1 715.93,-186.1 779,-187"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_S_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-171.5 551,-171.5 551,-148.5 635,-148.5 635,-171.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-148 551,-171 598,-171 598,-148 551,-148"/>
|
||||||
|
<text text-anchor="start" x="555" y="-155.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-148 598,-171 627,-171 627,-148 598,-148"/>
|
||||||
|
<text text-anchor="start" x="602" y="-155.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-148 627,-171 635,-171 635,-148 627,-148"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-148 627,-171 635,-171 635,-148 627,-148"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_2--W2 -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_2:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-158C699,-158 715,-158 779,-158"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M635,-160C699,-160 715,-160 779,-160"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-162C699,-162 715,-162 779,-162"/>
|
||||||
|
</g>
|
||||||
|
<!-- S1 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>S1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-124.5 551,-124.5 551,-101.5 635,-101.5 635,-124.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-101 551,-124 598,-124 598,-101 551,-101"/>
|
||||||
|
<text text-anchor="start" x="555" y="-108.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-101 598,-124 627,-124 627,-101 598,-101"/>
|
||||||
|
<text text-anchor="start" x="602" y="-108.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-101 627,-124 635,-124 635,-101 627,-101"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-101 627,-124 635,-124 635,-101 627,-101"/>
|
||||||
|
</g>
|
||||||
|
<!-- S1--W2 -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>S1:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-111C701.41,-111.9 715.93,-133.9 779,-133"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M635,-113C699.74,-113 714.26,-135 779,-135"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-115C698.07,-114.1 712.59,-136.1 779,-137"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_WIRE_1 -->
|
||||||
|
<g id="node21" class="node">
|
||||||
|
<title>AUTOGENERATED_WIRE_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1365.5,-86 1240.5,-86 1240.5,0 1365.5,0 1365.5,-86"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1241,-63 1241,-86 1293,-86 1293,-63 1241,-63"/>
|
||||||
|
<text text-anchor="start" x="1259.5" y="-70.8" font-family="arial" font-size="14.00">1x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1293,-63 1293,-86 1366,-86 1366,-63 1293,-63"/>
|
||||||
|
<text text-anchor="start" x="1311.5" y="-70.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="1243" y="-49.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="1251" y="-30.8" font-family="arial" font-size="14.00">     1:BK    </text>
|
||||||
|
<text text-anchor="start" x="1321" y="-30.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-23 1241,-25 1366,-25 1366,-23 1241,-23"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-21 1241,-23 1366,-23 1366,-21 1241,-21"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1241,-19 1241,-21 1366,-21 1366,-19 1241,-19"/>
|
||||||
|
<text text-anchor="start" x="1243" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- S1--AUTOGENERATED_WIRE_1 -->
|
||||||
|
<g id="edge33" class="edge">
|
||||||
|
<title>S1:e--AUTOGENERATED_WIRE_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-111C699.3,-112.08 712.26,-87.17 778.63,-74.03 981.21,-36.34 1033.11,-20.09 1240,-20"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-113C701.08,-113 714.04,-88.09 779,-76 981.81,-38.25 1033.71,-22 1240,-22"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-115C702.85,-113.92 715.81,-89.02 779.37,-77.97 982.4,-40.15 1034.31,-23.91 1240,-24"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_3 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>AUTOGENERATED_S_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="635,-77.5 551,-77.5 551,-54.5 635,-54.5 635,-77.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="551,-54 551,-77 598,-77 598,-54 551,-54"/>
|
||||||
|
<text text-anchor="start" x="555" y="-61.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="598,-54 598,-77 627,-77 627,-54 598,-54"/>
|
||||||
|
<text text-anchor="start" x="602" y="-61.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="627,-54 627,-77 635,-77 635,-54 627,-54"/>
|
||||||
|
<polygon fill="none" stroke="black" points="627,-54 627,-77 635,-77 635,-54 627,-54"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_3--W2 -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_3:e--W2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-64C703.87,-65.55 714.03,-109.55 779,-108"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M635,-66C701.92,-66 712.08,-110 779,-110"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M635,-68C699.97,-66.45 710.13,-110.45 779,-112"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_4 -->
|
||||||
|
<g id="node6" class="node">
|
||||||
|
<title>AUTOGENERATED_S_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-240.5 1010,-240.5 1010,-217.5 1094,-217.5 1094,-240.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-217 1010,-240 1057,-240 1057,-217 1010,-217"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-224.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-217 1057,-240 1086,-240 1086,-217 1057,-217"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-224.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-217 1086,-240 1094,-240 1094,-217 1086,-217"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-217 1086,-240 1094,-240 1094,-217 1086,-217"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21 -->
|
||||||
|
<g id="node19" class="node">
|
||||||
|
<title>W21</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1368,-294 1238,-294 1238,-110 1368,-110 1368,-294"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1238,-271 1238,-294 1368,-294 1368,-271 1238,-271"/>
|
||||||
|
<text text-anchor="start" x="1288.5" y="-278.8" font-family="arial" font-size="14.00">W21</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1238,-248 1238,-271 1293,-271 1293,-248 1238,-248"/>
|
||||||
|
<text text-anchor="start" x="1258" y="-255.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1293,-248 1293,-271 1368,-271 1368,-248 1293,-248"/>
|
||||||
|
<text text-anchor="start" x="1312.5" y="-255.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="1240" y="-234.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="1248" y="-215.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-215.8" font-family="arial" font-size="14.00">X2:1:A</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-208 1238,-210 1368,-210 1368,-208 1238,-208"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="1238,-206 1238,-208 1368,-208 1368,-206 1238,-206"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-204 1238,-206 1368,-206 1368,-204 1238,-204"/>
|
||||||
|
<text text-anchor="start" x="1250" y="-190.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-190.8" font-family="arial" font-size="14.00">X2:2:B</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-183 1238,-185 1368,-185 1368,-183 1238,-183"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="1238,-181 1238,-183 1368,-183 1368,-181 1238,-181"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-179 1238,-181 1368,-181 1368,-179 1238,-179"/>
|
||||||
|
<text text-anchor="start" x="1249.5" y="-165.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-165.8" font-family="arial" font-size="14.00">X2:3:C</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-158 1238,-160 1368,-160 1368,-158 1238,-158"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="1238,-156 1238,-158 1368,-158 1368,-156 1238,-156"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-154 1238,-156 1368,-156 1368,-154 1238,-154"/>
|
||||||
|
<text text-anchor="start" x="1250.5" y="-140.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<text text-anchor="start" x="1323" y="-140.8" font-family="arial" font-size="14.00">X2:4:D</text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-133 1238,-135 1368,-135 1368,-133 1238,-133"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="1238,-131 1238,-133 1368,-133 1368,-131 1238,-131"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="1238,-129 1238,-131 1368,-131 1368,-129 1238,-129"/>
|
||||||
|
<text text-anchor="start" x="1240" y="-115.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_4--W21 -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_4:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-227C1157.07,-227.9 1171.59,-205.9 1238,-205"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1094,-229C1158.74,-229 1173.26,-207 1238,-207"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-231C1160.41,-230.1 1174.93,-208.1 1238,-209"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_5 -->
|
||||||
|
<g id="node7" class="node">
|
||||||
|
<title>AUTOGENERATED_S_5</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-193.5 1010,-193.5 1010,-170.5 1094,-170.5 1094,-193.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-170 1010,-193 1057,-193 1057,-170 1010,-170"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-177.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-170 1057,-193 1086,-193 1086,-170 1057,-170"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-177.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-170 1086,-193 1094,-193 1094,-170 1086,-170"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-170 1086,-193 1094,-193 1094,-170 1086,-170"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_5--W21 -->
|
||||||
|
<g id="edge19" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_5:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-180C1158,-180 1174,-180 1238,-180"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1094,-182C1158,-182 1174,-182 1238,-182"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-184C1158,-184 1174,-184 1238,-184"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_6 -->
|
||||||
|
<g id="node8" class="node">
|
||||||
|
<title>AUTOGENERATED_S_6</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-146.5 1010,-146.5 1010,-123.5 1094,-123.5 1094,-146.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-123 1010,-146 1057,-146 1057,-123 1010,-123"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-130.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-123 1057,-146 1086,-146 1086,-123 1057,-123"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-130.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-123 1086,-146 1094,-146 1094,-123 1086,-123"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-123 1086,-146 1094,-146 1094,-123 1086,-123"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_6--W21 -->
|
||||||
|
<g id="edge21" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_6:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-133C1160.41,-133.9 1174.93,-155.9 1238,-155"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1094,-135C1158.74,-135 1173.26,-157 1238,-157"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-137C1157.07,-136.1 1171.59,-158.1 1238,-159"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_7 -->
|
||||||
|
<g id="node9" class="node">
|
||||||
|
<title>AUTOGENERATED_S_7</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1094,-99.5 1010,-99.5 1010,-76.5 1094,-76.5 1094,-99.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1010,-76 1010,-99 1057,-99 1057,-76 1010,-76"/>
|
||||||
|
<text text-anchor="start" x="1014" y="-83.8" font-family="arial" font-size="14.00">Splice</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1057,-76 1057,-99 1086,-99 1086,-76 1057,-76"/>
|
||||||
|
<text text-anchor="start" x="1061" y="-83.8" font-family="arial" font-size="14.00">CU</text>
|
||||||
|
<polygon fill="#d6775e" stroke="transparent" points="1086,-76 1086,-99 1094,-99 1094,-76 1086,-76"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1086,-76 1086,-99 1094,-99 1094,-76 1086,-76"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_S_7--W21 -->
|
||||||
|
<g id="edge23" class="edge">
|
||||||
|
<title>AUTOGENERATED_S_7:e--W21:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-86C1162.87,-87.55 1173.03,-131.55 1238,-130"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1094,-88C1160.92,-88 1171.08,-132 1238,-132"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1094,-90C1158.97,-88.45 1169.13,-132.45 1238,-134"/>
|
||||||
|
</g>
|
||||||
|
<!-- X2 -->
|
||||||
|
<g id="node10" class="node">
|
||||||
|
<title>X2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1661,-261 1512,-261 1512,-123 1661,-123 1661,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-238 1512.5,-261 1661.5,-261 1661.5,-238 1512.5,-238"/>
|
||||||
|
<text text-anchor="start" x="1578" y="-245.8" font-family="arial" font-size="14.00">X2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-215 1512.5,-238 1570.5,-238 1570.5,-215 1512.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1516.5" y="-222.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1570.5,-215 1570.5,-238 1621.5,-238 1621.5,-215 1570.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1574.5" y="-222.8" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1621.5,-215 1621.5,-238 1661.5,-238 1661.5,-215 1621.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1625.5" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-192 1512.5,-215 1585.5,-215 1585.5,-192 1512.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-192 1585.5,-215 1661.5,-215 1661.5,-192 1585.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1618.5" y="-199.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-169 1512.5,-192 1585.5,-192 1585.5,-169 1512.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-169 1585.5,-192 1661.5,-192 1661.5,-169 1585.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1618.5" y="-176.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-146 1512.5,-169 1585.5,-169 1585.5,-146 1512.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-146 1585.5,-169 1661.5,-169 1661.5,-146 1585.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1618" y="-153.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1512.5,-123 1512.5,-146 1585.5,-146 1585.5,-123 1512.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1545" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1585.5,-123 1585.5,-146 1661.5,-146 1661.5,-123 1585.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1618" y="-130.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
</g>
|
||||||
|
<!-- X3 -->
|
||||||
|
<g id="node11" class="node">
|
||||||
|
<title>X3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="1942,-261 1805,-261 1805,-123 1942,-123 1942,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-238 1805.5,-261 1942.5,-261 1942.5,-238 1805.5,-238"/>
|
||||||
|
<text text-anchor="start" x="1865" y="-245.8" font-family="arial" font-size="14.00">X3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-215 1805.5,-238 1863.5,-238 1863.5,-215 1805.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1809.5" y="-222.8" font-family="arial" font-size="14.00">JST SM</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1863.5,-215 1863.5,-238 1902.5,-238 1902.5,-215 1863.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1867.5" y="-222.8" font-family="arial" font-size="14.00">male</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1902.5,-215 1902.5,-238 1942.5,-238 1942.5,-215 1902.5,-215"/>
|
||||||
|
<text text-anchor="start" x="1906.5" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-192 1805.5,-215 1875.5,-215 1875.5,-192 1805.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1835.5" y="-199.8" font-family="arial" font-size="14.00">A</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-192 1875.5,-215 1942.5,-215 1942.5,-192 1875.5,-192"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-169 1805.5,-192 1875.5,-192 1875.5,-169 1805.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1835.5" y="-176.8" font-family="arial" font-size="14.00">B</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-169 1875.5,-192 1942.5,-192 1942.5,-169 1875.5,-169"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-146 1805.5,-169 1875.5,-169 1875.5,-146 1805.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1835" y="-153.8" font-family="arial" font-size="14.00">C</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-146 1875.5,-169 1942.5,-169 1942.5,-146 1875.5,-146"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1805.5,-123 1805.5,-146 1875.5,-146 1875.5,-123 1805.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1835" y="-130.8" font-family="arial" font-size="14.00">D</text>
|
||||||
|
<polygon fill="none" stroke="black" points="1875.5,-123 1875.5,-146 1942.5,-146 1942.5,-123 1875.5,-123"/>
|
||||||
|
<text text-anchor="start" x="1905" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
</g>
|
||||||
|
<!-- X2--X3 -->
|
||||||
|
<g id="edge35" class="edge">
|
||||||
|
<title>X2:e--X3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1671.09,-191C1723.62,-191 1742.31,-191 1794.79,-191"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1671.09,-193C1723.62,-193 1742.31,-193 1794.79,-193"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="1671,-188.5 1661,-192 1671,-195.5 1671,-188.5"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="1795,-195.5 1805,-192 1795,-188.5 1795,-195.5"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3 -->
|
||||||
|
<g id="node20" class="node">
|
||||||
|
<title>W3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2212,-293 2086,-293 2086,-109 2212,-109 2212,-293"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2086,-270 2086,-293 2212,-293 2212,-270 2086,-270"/>
|
||||||
|
<text text-anchor="start" x="2138.5" y="-277.8" font-family="arial" font-size="14.00">W3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2086,-247 2086,-270 2139,-270 2139,-247 2086,-247"/>
|
||||||
|
<text text-anchor="start" x="2105" y="-254.8" font-family="arial" font-size="14.00">4x</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2139,-247 2139,-270 2212,-270 2212,-247 2139,-247"/>
|
||||||
|
<text text-anchor="start" x="2157.5" y="-254.8" font-family="arial" font-size="14.00">0.1 m</text>
|
||||||
|
<text text-anchor="start" x="2107.5" y="-233.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
<text text-anchor="start" x="2088" y="-214.8" font-family="arial" font-size="14.00">X3:1:A</text>
|
||||||
|
<text text-anchor="start" x="2135" y="-214.8" font-family="arial" font-size="14.00">     1:WH    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-207 2086,-209 2212,-209 2212,-207 2086,-207"/>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="2086,-205 2086,-207 2212,-207 2212,-205 2086,-205"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-203 2086,-205 2212,-205 2212,-203 2086,-203"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-189.8" font-family="arial" font-size="14.00">X3:2:B</text>
|
||||||
|
<text text-anchor="start" x="2137" y="-189.8" font-family="arial" font-size="14.00">     2:BN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-182 2086,-184 2212,-184 2212,-182 2086,-182"/>
|
||||||
|
<polygon fill="#895956" stroke="transparent" points="2086,-180 2086,-182 2212,-182 2212,-180 2086,-180"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-178 2086,-180 2212,-180 2212,-178 2086,-178"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-164.8" font-family="arial" font-size="14.00">X3:3:C</text>
|
||||||
|
<text text-anchor="start" x="2136.5" y="-164.8" font-family="arial" font-size="14.00">     3:GN    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-157 2086,-159 2212,-159 2212,-157 2086,-157"/>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="2086,-155 2086,-157 2212,-157 2212,-155 2086,-155"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-153 2086,-155 2212,-155 2212,-153 2086,-153"/>
|
||||||
|
<text text-anchor="start" x="2088" y="-139.8" font-family="arial" font-size="14.00">X3:4:D</text>
|
||||||
|
<text text-anchor="start" x="2137.5" y="-139.8" font-family="arial" font-size="14.00">     4:YE    </text>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-132 2086,-134 2212,-134 2212,-132 2086,-132"/>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="2086,-130 2086,-132 2212,-132 2212,-130 2086,-130"/>
|
||||||
|
<polygon fill="#000000" stroke="transparent" points="2086,-128 2086,-130 2212,-130 2212,-128 2086,-128"/>
|
||||||
|
<text text-anchor="start" x="2107.5" y="-114.8" font-family="arial" font-size="14.00"> </text>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge25" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-202C2006.25,-202.02 2022.24,-204.02 2086,-204"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1942,-204C2006.01,-204 2021.99,-206 2086,-206"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-206C2005.76,-205.98 2021.75,-207.98 2086,-208"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge27" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-178C2006.13,-178 2022.12,-179 2086,-179"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1942,-180C2006,-180 2022,-181 2086,-181"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-182C2005.88,-182 2021.87,-183 2086,-183"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge29" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-155C2005.88,-155 2021.87,-154 2086,-154"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1942,-157C2006,-157 2022,-156 2086,-156"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-159C2006.13,-159 2022.12,-158 2086,-158"/>
|
||||||
|
</g>
|
||||||
|
<!-- X3--W3 -->
|
||||||
|
<g id="edge31" class="edge">
|
||||||
|
<title>X3:e--W3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-132C2005.64,-132.03 2021.62,-129.03 2086,-129"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1942,-134C2006.01,-134 2021.99,-131 2086,-131"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1942,-136C2006.38,-135.97 2022.36,-132.97 2086,-133"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1 -->
|
||||||
|
<g id="node12" class="node">
|
||||||
|
<title>AUTOGENERATED_F_1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-203.5 2356,-203.5 2356,-180.5 2446,-180.5 2446,-203.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-180 2356,-203 2409,-203 2409,-180 2356,-180"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-187.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-180 2409,-203 2438,-203 2438,-180 2409,-180"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-187.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-180 2438,-203 2446,-203 2446,-180 2438,-180"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-180 2438,-203 2446,-203 2446,-180 2438,-180"/>
|
||||||
|
</g>
|
||||||
|
<!-- X4 -->
|
||||||
|
<g id="node16" class="node">
|
||||||
|
<title>X4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2834,-261 2590,-261 2590,-123 2834,-123 2834,-261"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-238 2590,-261 2834,-261 2834,-238 2590,-238"/>
|
||||||
|
<text text-anchor="start" x="2703" y="-245.8" font-family="arial" font-size="14.00">X4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-215 2590,-238 2756,-238 2756,-215 2590,-215"/>
|
||||||
|
<text text-anchor="start" x="2594" y="-222.8" font-family="arial" font-size="14.00">Screw terminal connector</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2756,-215 2756,-238 2796,-238 2796,-215 2756,-215"/>
|
||||||
|
<text text-anchor="start" x="2760" y="-222.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2796,-215 2796,-238 2826,-238 2826,-215 2796,-215"/>
|
||||||
|
<text text-anchor="start" x="2800" y="-222.8" font-family="arial" font-size="14.00">GN</text>
|
||||||
|
<polygon fill="#00ff00" stroke="transparent" points="2826,-215 2826,-238 2834,-238 2834,-215 2826,-215"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2826,-215 2826,-238 2834,-238 2834,-215 2826,-215"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-192 2590,-215 2709,-215 2709,-192 2590,-192"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-199.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-192 2709,-215 2834,-215 2834,-192 2709,-192"/>
|
||||||
|
<text text-anchor="start" x="2764.5" y="-199.8" font-family="arial" font-size="14.00">W</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-169 2590,-192 2709,-192 2709,-169 2590,-169"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-176.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-169 2709,-192 2834,-192 2834,-169 2709,-169"/>
|
||||||
|
<text text-anchor="start" x="2766.5" y="-176.8" font-family="arial" font-size="14.00">X</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-146 2590,-169 2709,-169 2709,-146 2590,-146"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-153.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-146 2709,-169 2834,-169 2834,-146 2709,-146"/>
|
||||||
|
<text text-anchor="start" x="2766.5" y="-153.8" font-family="arial" font-size="14.00">Y</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2590,-123 2590,-146 2709,-146 2709,-123 2590,-123"/>
|
||||||
|
<text text-anchor="start" x="2645.5" y="-130.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2709,-123 2709,-146 2834,-146 2834,-123 2709,-123"/>
|
||||||
|
<text text-anchor="start" x="2767" y="-130.8" font-family="arial" font-size="14.00">Z</text>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_1--X4 -->
|
||||||
|
<g id="edge36" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_1:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-192C2506.71,-192 2523.93,-181.28 2579.88,-180.1"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2580.04,-183.6 2590,-180 2579.96,-176.6 2580.04,-183.6"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2 -->
|
||||||
|
<g id="node13" class="node">
|
||||||
|
<title>AUTOGENERATED_F_2</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-250.5 2356,-250.5 2356,-227.5 2446,-227.5 2446,-250.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-227 2356,-250 2409,-250 2409,-227 2356,-227"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-234.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-227 2409,-250 2438,-250 2438,-227 2409,-227"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-234.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-227 2438,-250 2446,-250 2446,-227 2438,-227"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-227 2438,-250 2446,-250 2446,-227 2438,-227"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_2--X4 -->
|
||||||
|
<g id="edge37" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_2:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-239C2508.26,-239 2522.63,-207.72 2579.66,-204.3"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2580.11,-207.79 2590,-204 2579.9,-200.79 2580.11,-207.79"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3 -->
|
||||||
|
<g id="node14" class="node">
|
||||||
|
<title>AUTOGENERATED_F_3</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-109.5 2356,-109.5 2356,-86.5 2446,-86.5 2446,-109.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-86 2356,-109 2409,-109 2409,-86 2356,-86"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-93.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-86 2409,-109 2438,-109 2438,-86 2409,-86"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-93.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-86 2438,-109 2446,-109 2446,-86 2438,-86"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-86 2438,-109 2446,-109 2446,-86 2438,-86"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_3--X4 -->
|
||||||
|
<g id="edge38" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_3:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-98C2508.49,-98 2522.61,-130.3 2580,-133.71"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2579.9,-137.21 2590,-134 2580.11,-130.21 2579.9,-137.21"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4 -->
|
||||||
|
<g id="node15" class="node">
|
||||||
|
<title>AUTOGENERATED_F_4</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="2446,-156.5 2356,-156.5 2356,-133.5 2446,-133.5 2446,-156.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2356,-133 2356,-156 2409,-156 2409,-133 2356,-133"/>
|
||||||
|
<text text-anchor="start" x="2360" y="-140.8" font-family="arial" font-size="14.00">Ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="2409,-133 2409,-156 2438,-156 2438,-133 2409,-133"/>
|
||||||
|
<text text-anchor="start" x="2413" y="-140.8" font-family="arial" font-size="14.00">GY</text>
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="2438,-133 2438,-156 2446,-156 2446,-133 2438,-133"/>
|
||||||
|
<polygon fill="none" stroke="black" points="2438,-133 2438,-156 2446,-156 2446,-133 2438,-133"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_4--X4 -->
|
||||||
|
<g id="edge39" class="edge">
|
||||||
|
<title>AUTOGENERATED_F_4:e--X4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2446,-145C2506.71,-145 2523.93,-155.72 2579.88,-156.9"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="2579.96,-160.4 2590,-157 2580.04,-153.4 2579.96,-160.4"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_1 -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-172C474.53,-173.28 487.21,-206.28 551,-205"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M407,-174C472.66,-174 485.34,-207 551,-207"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-176C470.79,-174.72 483.47,-207.72 551,-209"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_2 -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-147C472.34,-147.36 487.96,-158.36 551,-158"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M407,-149C471.19,-149 486.81,-160 551,-160"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-151C470.04,-150.64 485.66,-161.64 551,-162"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--S1 -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>W1:e--S1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-122C470.04,-122.36 485.66,-111.36 551,-111"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M407,-124C471.19,-124 486.81,-113 551,-113"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-126C472.34,-125.64 487.96,-114.64 551,-115"/>
|
||||||
|
</g>
|
||||||
|
<!-- W1--AUTOGENERATED_S_3 -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>W1:e--AUTOGENERATED_S_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-97C470.79,-98.28 483.47,-65.28 551,-64"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M407,-99C472.66,-99 485.34,-66 551,-66"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M407,-101C474.53,-99.72 487.21,-66.72 551,-68"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_4 -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-183C934.87,-184.55 945.03,-228.55 1010,-227"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M866,-185C932.92,-185 943.08,-229 1010,-229"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-187C930.97,-185.45 941.13,-229.45 1010,-231"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_5 -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_5:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-158C932.41,-158.9 946.93,-180.9 1010,-180"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M866,-160C930.74,-160 945.26,-182 1010,-182"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-162C929.07,-161.1 943.59,-183.1 1010,-184"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_6 -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_6:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-133C930,-133 946,-133 1010,-133"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M866,-135C930,-135 946,-135 1010,-135"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-137C930,-137 946,-137 1010,-137"/>
|
||||||
|
</g>
|
||||||
|
<!-- W2--AUTOGENERATED_S_7 -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>W2:e--AUTOGENERATED_S_7:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-108C929.07,-108.9 943.59,-86.9 1010,-86"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M866,-110C930.74,-110 945.26,-88 1010,-88"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M866,-112C932.41,-111.1 946.93,-89.1 1010,-90"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge18" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-205C1431.64,-205.03 1447.62,-202.03 1512,-202"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M1368,-207C1432.01,-207 1447.99,-204 1512,-204"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-209C1432.38,-208.97 1448.36,-205.97 1512,-206"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge20" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-180C1431.76,-180.02 1447.75,-178.02 1512,-178"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M1368,-182C1432.01,-182 1447.99,-180 1512,-180"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-184C1432.25,-183.98 1448.24,-181.98 1512,-182"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge22" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-155C1432,-155 1448,-155 1512,-155"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M1368,-157C1432,-157 1448,-157 1512,-157"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-159C1432,-159 1448,-159 1512,-159"/>
|
||||||
|
</g>
|
||||||
|
<!-- W21--X2 -->
|
||||||
|
<g id="edge24" class="edge">
|
||||||
|
<title>W21:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-130C1432.25,-130.02 1448.24,-132.02 1512,-132"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M1368,-132C1432.01,-132 1447.99,-134 1512,-134"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1368,-134C1431.76,-133.98 1447.75,-135.98 1512,-136"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_1 -->
|
||||||
|
<g id="edge26" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-204C2274.96,-204.52 2290.35,-190.52 2356,-190"/>
|
||||||
|
<path fill="none" stroke="#ffffff" stroke-width="2" d="M2212,-206C2276.3,-206 2291.7,-192 2356,-192"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-208C2277.65,-207.48 2293.04,-193.48 2356,-194"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_2 -->
|
||||||
|
<g id="edge28" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-179C2282.99,-180.79 2288.99,-238.79 2356,-237"/>
|
||||||
|
<path fill="none" stroke="#895956" stroke-width="2" d="M2212,-181C2281,-181 2287,-239 2356,-239"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-183C2279.01,-181.21 2285.01,-239.21 2356,-241"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_3 -->
|
||||||
|
<g id="edge30" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_3:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-154C2279.01,-155.79 2285.01,-97.79 2356,-96"/>
|
||||||
|
<path fill="none" stroke="#00ff00" stroke-width="2" d="M2212,-156C2281,-156 2287,-98 2356,-98"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-158C2282.99,-156.21 2288.99,-98.21 2356,-100"/>
|
||||||
|
</g>
|
||||||
|
<!-- W3--AUTOGENERATED_F_4 -->
|
||||||
|
<g id="edge32" class="edge">
|
||||||
|
<title>W3:e--AUTOGENERATED_F_4:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-129C2277.65,-129.52 2293.04,-143.52 2356,-143"/>
|
||||||
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M2212,-131C2276.3,-131 2291.7,-145 2356,-145"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M2212,-133C2274.96,-132.48 2290.35,-146.48 2356,-147"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_WIRE_1--X2 -->
|
||||||
|
<g id="edge34" class="edge">
|
||||||
|
<title>AUTOGENERATED_WIRE_1:e--X2:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-20C1450.41,-22.31 1432.54,-134.31 1512,-132"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-22C1448.43,-22 1430.57,-134 1512,-134"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M1367,-24C1446.46,-21.69 1428.59,-133.69 1512,-136"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 49 KiB |
@ -60,3 +60,27 @@
|
|||||||
[Source](ex10.yml) - [Bill of Materials](ex10.bom.tsv)
|
[Source](ex10.yml) - [Bill of Materials](ex10.bom.tsv)
|
||||||
|
|
||||||
|
|
||||||
|
## Example 11
|
||||||
|

|
||||||
|
|
||||||
|
[Source](ex11.yml) - [Bill of Materials](ex11.bom.tsv)
|
||||||
|
|
||||||
|
|
||||||
|
## Example 12
|
||||||
|

|
||||||
|
|
||||||
|
[Source](ex12.yml) - [Bill of Materials](ex12.bom.tsv)
|
||||||
|
|
||||||
|
|
||||||
|
## Example 13
|
||||||
|

|
||||||
|
|
||||||
|
[Source](ex13.yml) - [Bill of Materials](ex13.bom.tsv)
|
||||||
|
|
||||||
|
|
||||||
|
## Example 14
|
||||||
|

|
||||||
|
|
||||||
|
[Source](ex14.yml) - [Bill of Materials](ex14.bom.tsv)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,3 +3,4 @@ graphviz
|
|||||||
pillow
|
pillow
|
||||||
pyyaml
|
pyyaml
|
||||||
setuptools
|
setuptools
|
||||||
|
tabulate
|
||||||
|
|||||||
10
setup.py
@ -15,13 +15,14 @@ setup(
|
|||||||
author="Daniel Rojas",
|
author="Daniel Rojas",
|
||||||
# author_email='',
|
# author_email='',
|
||||||
description="Easily document cables and wiring harnesses",
|
description="Easily document cables and wiring harnesses",
|
||||||
long_description=open(README_PATH).read(),
|
long_description=README_PATH.read_text(),
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"click",
|
"click",
|
||||||
"pyyaml",
|
|
||||||
"pillow",
|
|
||||||
"graphviz",
|
"graphviz",
|
||||||
|
"pillow",
|
||||||
|
"pyyaml",
|
||||||
|
"tabulate",
|
||||||
],
|
],
|
||||||
license="GPLv3",
|
license="GPLv3",
|
||||||
keywords="cable connector hardware harness wiring wiring-diagram wiring-harness",
|
keywords="cable connector hardware harness wiring wiring-diagram wiring-harness",
|
||||||
@ -37,8 +38,9 @@ setup(
|
|||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
"Environment :: Console",
|
"Environment :: Console",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
"Programming Language :: Python :: 3.7",
|
|
||||||
"Programming Language :: Python :: 3.8",
|
"Programming Language :: Python :: 3.8",
|
||||||
|
"Programming Language :: Python :: 3.9",
|
||||||
|
"Programming Language :: Python :: 3.10",
|
||||||
"Topic :: Utilities",
|
"Topic :: Utilities",
|
||||||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
||||||
],
|
],
|
||||||
|
|||||||
@ -1,433 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from dataclasses import InitVar, dataclass, field
|
|
||||||
from enum import Enum, auto
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Dict, List, Optional, Tuple, Union
|
|
||||||
|
|
||||||
from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme
|
|
||||||
from wireviz.wv_helper import aspect_ratio, int2tuple
|
|
||||||
|
|
||||||
# Each type alias have their legal values described in comments - validation might be implemented in the future
|
|
||||||
PlainText = str # Text not containing HTML tags nor newlines
|
|
||||||
Hypertext = str # Text possibly including HTML hyperlinks that are removed in all outputs except HTML output
|
|
||||||
MultilineHypertext = (
|
|
||||||
str # Hypertext possibly also including newlines to break lines in diagram output
|
|
||||||
)
|
|
||||||
|
|
||||||
Designator = PlainText # Case insensitive unique name of connector or cable
|
|
||||||
|
|
||||||
# Literal type aliases below are commented to avoid requiring python 3.8
|
|
||||||
ConnectorMultiplier = PlainText # = Literal['pincount', 'populated']
|
|
||||||
CableMultiplier = (
|
|
||||||
PlainText # = Literal['wirecount', 'terminations', 'length', 'total_length']
|
|
||||||
)
|
|
||||||
ImageScale = PlainText # = Literal['false', 'true', 'width', 'height', 'both']
|
|
||||||
|
|
||||||
# Type combinations
|
|
||||||
Pin = Union[int, PlainText] # Pin identifier
|
|
||||||
PinIndex = int # Zero-based pin index
|
|
||||||
Wire = Union[int, PlainText] # Wire number or Literal['s'] for shield
|
|
||||||
NoneOrMorePins = Union[
|
|
||||||
Pin, Tuple[Pin, ...], None
|
|
||||||
] # None, one, or a tuple of pin identifiers
|
|
||||||
NoneOrMorePinIndices = Union[
|
|
||||||
PinIndex, Tuple[PinIndex, ...], None
|
|
||||||
] # None, one, or a tuple of zero-based pin indices
|
|
||||||
OneOrMoreWires = Union[Wire, Tuple[Wire, ...]] # One or a tuple of wires
|
|
||||||
|
|
||||||
# Metadata can contain whatever is needed by the HTML generation/template.
|
|
||||||
MetadataKeys = PlainText # Literal['title', 'description', 'notes', ...]
|
|
||||||
|
|
||||||
|
|
||||||
Side = Enum("Side", "LEFT RIGHT")
|
|
||||||
|
|
||||||
|
|
||||||
class Metadata(dict):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Options:
|
|
||||||
fontname: PlainText = "arial"
|
|
||||||
bgcolor: Color = "WH"
|
|
||||||
bgcolor_node: Optional[Color] = "WH"
|
|
||||||
bgcolor_connector: Optional[Color] = None
|
|
||||||
bgcolor_cable: Optional[Color] = None
|
|
||||||
bgcolor_bundle: Optional[Color] = None
|
|
||||||
color_mode: ColorMode = "SHORT"
|
|
||||||
mini_bom_mode: bool = True
|
|
||||||
template_separator: str = "."
|
|
||||||
|
|
||||||
def __post_init__(self):
|
|
||||||
if not self.bgcolor_node:
|
|
||||||
self.bgcolor_node = self.bgcolor
|
|
||||||
if not self.bgcolor_connector:
|
|
||||||
self.bgcolor_connector = self.bgcolor_node
|
|
||||||
if not self.bgcolor_cable:
|
|
||||||
self.bgcolor_cable = self.bgcolor_node
|
|
||||||
if not self.bgcolor_bundle:
|
|
||||||
self.bgcolor_bundle = self.bgcolor_cable
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Tweak:
|
|
||||||
override: Optional[Dict[Designator, Dict[str, Optional[str]]]] = None
|
|
||||||
append: Union[str, List[str], None] = None
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Image:
|
|
||||||
# Attributes of the image object <img>:
|
|
||||||
src: str
|
|
||||||
scale: Optional[ImageScale] = None
|
|
||||||
# Attributes of the image cell <td> containing the image:
|
|
||||||
width: Optional[int] = None
|
|
||||||
height: Optional[int] = None
|
|
||||||
fixedsize: Optional[bool] = None
|
|
||||||
bgcolor: Optional[Color] = None
|
|
||||||
# Contents of the text cell <td> just below the image cell:
|
|
||||||
caption: Optional[MultilineHypertext] = None
|
|
||||||
# See also HTML doc at https://graphviz.org/doc/info/shapes.html#html
|
|
||||||
|
|
||||||
def __post_init__(self):
|
|
||||||
|
|
||||||
if self.fixedsize is None:
|
|
||||||
# Default True if any dimension specified unless self.scale also is specified.
|
|
||||||
self.fixedsize = (self.width or self.height) and self.scale is None
|
|
||||||
|
|
||||||
if self.scale is None:
|
|
||||||
if not self.width and not self.height:
|
|
||||||
self.scale = "false"
|
|
||||||
elif self.width and self.height:
|
|
||||||
self.scale = "both"
|
|
||||||
else:
|
|
||||||
self.scale = "true" # When only one dimension is specified.
|
|
||||||
|
|
||||||
if self.fixedsize:
|
|
||||||
# If only one dimension is specified, compute the other
|
|
||||||
# because Graphviz requires both when fixedsize=True.
|
|
||||||
if self.height:
|
|
||||||
if not self.width:
|
|
||||||
self.width = self.height * aspect_ratio(self.src)
|
|
||||||
else:
|
|
||||||
if self.width:
|
|
||||||
self.height = self.width / aspect_ratio(self.src)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class AdditionalComponent:
|
|
||||||
type: MultilineHypertext
|
|
||||||
subtype: Optional[MultilineHypertext] = None
|
|
||||||
manufacturer: Optional[MultilineHypertext] = None
|
|
||||||
mpn: Optional[MultilineHypertext] = None
|
|
||||||
supplier: Optional[MultilineHypertext] = None
|
|
||||||
spn: Optional[MultilineHypertext] = None
|
|
||||||
pn: Optional[Hypertext] = None
|
|
||||||
qty: float = 1
|
|
||||||
unit: Optional[str] = None
|
|
||||||
qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None
|
|
||||||
bgcolor: Optional[Color] = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def description(self) -> str:
|
|
||||||
s = self.type.rstrip() + f", {self.subtype.rstrip()}" if self.subtype else ""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Connector:
|
|
||||||
name: Designator
|
|
||||||
bgcolor: Optional[Color] = None
|
|
||||||
bgcolor_title: Optional[Color] = None
|
|
||||||
manufacturer: Optional[MultilineHypertext] = None
|
|
||||||
mpn: Optional[MultilineHypertext] = None
|
|
||||||
supplier: Optional[MultilineHypertext] = None
|
|
||||||
spn: Optional[MultilineHypertext] = None
|
|
||||||
pn: Optional[Hypertext] = None
|
|
||||||
style: Optional[str] = None
|
|
||||||
category: Optional[str] = None
|
|
||||||
type: Optional[MultilineHypertext] = None
|
|
||||||
subtype: Optional[MultilineHypertext] = None
|
|
||||||
pincount: Optional[int] = None
|
|
||||||
image: Optional[Image] = None
|
|
||||||
notes: Optional[MultilineHypertext] = None
|
|
||||||
pins: List[Pin] = field(default_factory=list)
|
|
||||||
pinlabels: List[Pin] = field(default_factory=list)
|
|
||||||
pincolors: List[Color] = field(default_factory=list)
|
|
||||||
color: Optional[Color] = None
|
|
||||||
show_name: Optional[bool] = None
|
|
||||||
show_pincount: Optional[bool] = None
|
|
||||||
hide_disconnected_pins: bool = False
|
|
||||||
loops: List[List[Pin]] = field(default_factory=list)
|
|
||||||
ignore_in_bom: bool = False
|
|
||||||
additional_components: List[AdditionalComponent] = field(default_factory=list)
|
|
||||||
|
|
||||||
def __post_init__(self) -> None:
|
|
||||||
|
|
||||||
if isinstance(self.image, dict):
|
|
||||||
self.image = Image(**self.image)
|
|
||||||
|
|
||||||
self.ports_left = False
|
|
||||||
self.ports_right = False
|
|
||||||
self.visible_pins = {}
|
|
||||||
|
|
||||||
if self.style == "simple":
|
|
||||||
if self.pincount and self.pincount > 1:
|
|
||||||
raise Exception(
|
|
||||||
"Connectors with style set to simple may only have one pin"
|
|
||||||
)
|
|
||||||
self.pincount = 1
|
|
||||||
|
|
||||||
if not self.pincount:
|
|
||||||
self.pincount = max(
|
|
||||||
len(self.pins), len(self.pinlabels), len(self.pincolors)
|
|
||||||
)
|
|
||||||
if not self.pincount:
|
|
||||||
raise Exception(
|
|
||||||
"You need to specify at least one, pincount, pins, pinlabels, or pincolors"
|
|
||||||
)
|
|
||||||
|
|
||||||
# create default list for pins (sequential) if not specified
|
|
||||||
if not self.pins:
|
|
||||||
self.pins = list(range(1, self.pincount + 1))
|
|
||||||
|
|
||||||
if len(self.pins) != len(set(self.pins)):
|
|
||||||
raise Exception("Pins are not unique")
|
|
||||||
|
|
||||||
if self.show_name is None:
|
|
||||||
# hide designators for simple and for auto-generated connectors by default
|
|
||||||
self.show_name = self.style != "simple" and self.name[0:2] != "__"
|
|
||||||
|
|
||||||
if self.show_pincount is None:
|
|
||||||
# hide pincount for simple (1 pin) connectors by default
|
|
||||||
self.show_pincount = self.style != "simple"
|
|
||||||
|
|
||||||
for loop in self.loops:
|
|
||||||
# TODO: allow using pin labels in addition to pin numbers, just like when defining regular connections
|
|
||||||
# TODO: include properties of wire used to create the loop
|
|
||||||
if len(loop) != 2:
|
|
||||||
raise Exception("Loops must be between exactly two pins!")
|
|
||||||
for pin in loop:
|
|
||||||
if pin not in self.pins:
|
|
||||||
raise Exception(f'Unknown loop pin "{pin}" for connector "{self.name}"!')
|
|
||||||
# Make sure loop connected pins are not hidden.
|
|
||||||
self.activate_pin(pin)
|
|
||||||
|
|
||||||
for i, item in enumerate(self.additional_components):
|
|
||||||
if isinstance(item, dict):
|
|
||||||
self.additional_components[i] = AdditionalComponent(**item)
|
|
||||||
|
|
||||||
def activate_pin(self, pin: Pin, side: Side) -> None:
|
|
||||||
self.visible_pins[pin] = True
|
|
||||||
if side == Side.LEFT:
|
|
||||||
self.ports_left = True
|
|
||||||
elif side == Side.RIGHT:
|
|
||||||
self.ports_right = True
|
|
||||||
|
|
||||||
def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> int:
|
|
||||||
if not qty_multiplier:
|
|
||||||
return 1
|
|
||||||
elif qty_multiplier == "pincount":
|
|
||||||
return self.pincount
|
|
||||||
elif qty_multiplier == "populated":
|
|
||||||
return sum(self.visible_pins.values())
|
|
||||||
else:
|
|
||||||
raise ValueError(
|
|
||||||
f"invalid qty multiplier parameter for connector {qty_multiplier}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Cable:
|
|
||||||
name: Designator
|
|
||||||
bgcolor: Optional[Color] = None
|
|
||||||
bgcolor_title: Optional[Color] = None
|
|
||||||
manufacturer: Union[MultilineHypertext, List[MultilineHypertext], None] = None
|
|
||||||
mpn: Union[MultilineHypertext, List[MultilineHypertext], None] = None
|
|
||||||
supplier: Union[MultilineHypertext, List[MultilineHypertext], None] = None
|
|
||||||
spn: Union[MultilineHypertext, List[MultilineHypertext], None] = None
|
|
||||||
pn: Union[Hypertext, List[Hypertext], None] = None
|
|
||||||
category: Optional[str] = None
|
|
||||||
type: Optional[MultilineHypertext] = None
|
|
||||||
gauge: Optional[float] = None
|
|
||||||
gauge_unit: Optional[str] = None
|
|
||||||
show_equiv: bool = False
|
|
||||||
length: float = 0
|
|
||||||
length_unit: Optional[str] = None
|
|
||||||
color: Optional[Color] = None
|
|
||||||
wirecount: Optional[int] = None
|
|
||||||
shield: Union[bool, Color] = False
|
|
||||||
image: Optional[Image] = None
|
|
||||||
notes: Optional[MultilineHypertext] = None
|
|
||||||
colors: List[Colors] = field(default_factory=list)
|
|
||||||
wirelabels: List[Wire] = field(default_factory=list)
|
|
||||||
color_code: Optional[ColorScheme] = None
|
|
||||||
show_name: Optional[bool] = None
|
|
||||||
show_wirecount: bool = True
|
|
||||||
show_wirenumbers: Optional[bool] = None
|
|
||||||
ignore_in_bom: bool = False
|
|
||||||
additional_components: List[AdditionalComponent] = field(default_factory=list)
|
|
||||||
|
|
||||||
def __post_init__(self) -> None:
|
|
||||||
|
|
||||||
if isinstance(self.image, dict):
|
|
||||||
self.image = Image(**self.image)
|
|
||||||
|
|
||||||
if isinstance(self.gauge, str): # gauge and unit specified
|
|
||||||
try:
|
|
||||||
g, u = self.gauge.split(" ")
|
|
||||||
except Exception:
|
|
||||||
raise Exception(
|
|
||||||
f"Cable {self.name} gauge={self.gauge} - Gauge must be a number, or number and unit separated by a space"
|
|
||||||
)
|
|
||||||
self.gauge = g
|
|
||||||
|
|
||||||
if self.gauge_unit is not None:
|
|
||||||
print(
|
|
||||||
f"Warning: Cable {self.name} gauge_unit={self.gauge_unit} is ignored because its gauge contains {u}"
|
|
||||||
)
|
|
||||||
if u.upper() == "AWG":
|
|
||||||
self.gauge_unit = u.upper()
|
|
||||||
else:
|
|
||||||
self.gauge_unit = u.replace("mm2", "mm\u00B2")
|
|
||||||
|
|
||||||
elif self.gauge is not None: # gauge specified, assume mm2
|
|
||||||
if self.gauge_unit is None:
|
|
||||||
self.gauge_unit = "mm\u00B2"
|
|
||||||
else:
|
|
||||||
pass # gauge not specified
|
|
||||||
|
|
||||||
if isinstance(self.length, str): # length and unit specified
|
|
||||||
try:
|
|
||||||
L, u = self.length.split(" ")
|
|
||||||
L = float(L)
|
|
||||||
except Exception:
|
|
||||||
raise Exception(
|
|
||||||
f"Cable {self.name} length={self.length} - Length must be a number, or number and unit separated by a space"
|
|
||||||
)
|
|
||||||
self.length = L
|
|
||||||
if self.length_unit is not None:
|
|
||||||
print(
|
|
||||||
f"Warning: Cable {self.name} length_unit={self.length_unit} is ignored because its length contains {u}"
|
|
||||||
)
|
|
||||||
self.length_unit = u
|
|
||||||
elif not any(isinstance(self.length, t) for t in [int, float]):
|
|
||||||
raise Exception(f"Cable {self.name} length has a non-numeric value")
|
|
||||||
elif self.length_unit is None:
|
|
||||||
self.length_unit = "m"
|
|
||||||
|
|
||||||
self.connections = []
|
|
||||||
|
|
||||||
if self.wirecount: # number of wires explicitly defined
|
|
||||||
if self.colors: # use custom color palette (partly or looped if needed)
|
|
||||||
pass
|
|
||||||
elif self.color_code:
|
|
||||||
# use standard color palette (partly or looped if needed)
|
|
||||||
if self.color_code not in COLOR_CODES:
|
|
||||||
raise Exception("Unknown color code")
|
|
||||||
self.colors = COLOR_CODES[self.color_code]
|
|
||||||
else: # no colors defined, add dummy colors
|
|
||||||
self.colors = [""] * self.wirecount
|
|
||||||
|
|
||||||
# make color code loop around if more wires than colors
|
|
||||||
if self.wirecount > len(self.colors):
|
|
||||||
m = self.wirecount // len(self.colors) + 1
|
|
||||||
self.colors = self.colors * int(m)
|
|
||||||
# cut off excess after looping
|
|
||||||
self.colors = self.colors[: self.wirecount]
|
|
||||||
else: # wirecount implicit in length of color list
|
|
||||||
if not self.colors:
|
|
||||||
raise Exception(
|
|
||||||
"Unknown number of wires. Must specify wirecount or colors (implicit length)"
|
|
||||||
)
|
|
||||||
self.wirecount = len(self.colors)
|
|
||||||
|
|
||||||
if self.wirelabels:
|
|
||||||
if self.shield and "s" in self.wirelabels:
|
|
||||||
raise Exception(
|
|
||||||
'"s" may not be used as a wire label for a shielded cable.'
|
|
||||||
)
|
|
||||||
|
|
||||||
# if lists of part numbers are provided check this is a bundle and that it matches the wirecount.
|
|
||||||
for idfield in [self.manufacturer, self.mpn, self.supplier, self.spn, self.pn]:
|
|
||||||
if isinstance(idfield, list):
|
|
||||||
if self.category == "bundle":
|
|
||||||
# check the length
|
|
||||||
if len(idfield) != self.wirecount:
|
|
||||||
raise Exception("lists of part data must match wirecount")
|
|
||||||
else:
|
|
||||||
raise Exception("lists of part data are only supported for bundles")
|
|
||||||
|
|
||||||
if self.show_name is None:
|
|
||||||
# hide designators for auto-generated cables by default
|
|
||||||
self.show_name = self.name[0:2] != "__"
|
|
||||||
|
|
||||||
if self.show_wirenumbers is None:
|
|
||||||
# by default, show wire numbers for cables, hide for bundles
|
|
||||||
self.show_wirenumbers = self.category != "bundle"
|
|
||||||
|
|
||||||
for i, item in enumerate(self.additional_components):
|
|
||||||
if isinstance(item, dict):
|
|
||||||
self.additional_components[i] = AdditionalComponent(**item)
|
|
||||||
|
|
||||||
# The *_pin arguments accept a tuple, but it seems not in use with the current code.
|
|
||||||
def connect(
|
|
||||||
self,
|
|
||||||
from_name: Optional[Designator],
|
|
||||||
from_pin: NoneOrMorePinIndices,
|
|
||||||
via_wire: OneOrMoreWires,
|
|
||||||
to_name: Optional[Designator],
|
|
||||||
to_pin: NoneOrMorePinIndices,
|
|
||||||
) -> None:
|
|
||||||
|
|
||||||
from_pin = int2tuple(from_pin)
|
|
||||||
via_wire = int2tuple(via_wire)
|
|
||||||
to_pin = int2tuple(to_pin)
|
|
||||||
if len(from_pin) != len(to_pin):
|
|
||||||
raise Exception("from_pin must have the same number of elements as to_pin")
|
|
||||||
for i, _ in enumerate(from_pin):
|
|
||||||
self.connections.append(
|
|
||||||
Connection(from_name, from_pin[i], via_wire[i], to_name, to_pin[i])
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float:
|
|
||||||
if not qty_multiplier:
|
|
||||||
return 1
|
|
||||||
elif qty_multiplier == "wirecount":
|
|
||||||
return self.wirecount
|
|
||||||
elif qty_multiplier == "terminations":
|
|
||||||
return len(self.connections)
|
|
||||||
elif qty_multiplier == "length":
|
|
||||||
return self.length
|
|
||||||
elif qty_multiplier == "total_length":
|
|
||||||
return self.length * self.wirecount
|
|
||||||
else:
|
|
||||||
raise ValueError(
|
|
||||||
f"invalid qty multiplier parameter for cable {qty_multiplier}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Connection:
|
|
||||||
from_name: Optional[Designator]
|
|
||||||
from_pin: Optional[Pin]
|
|
||||||
via_port: Wire
|
|
||||||
to_name: Optional[Designator]
|
|
||||||
to_pin: Optional[Pin]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class MatePin:
|
|
||||||
from_name: Designator
|
|
||||||
from_pin: Pin
|
|
||||||
to_name: Designator
|
|
||||||
to_pin: Pin
|
|
||||||
shape: str
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class MateComponent:
|
|
||||||
from_name: Designator
|
|
||||||
to_name: Designator
|
|
||||||
shape: str
|
|
||||||
@ -1,706 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import re
|
|
||||||
from collections import Counter
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from itertools import zip_longest
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Any, List, Union
|
|
||||||
|
|
||||||
from graphviz import Graph
|
|
||||||
|
|
||||||
from wireviz import APP_NAME, APP_URL, __version__, wv_colors
|
|
||||||
from wireviz.DataClasses import (
|
|
||||||
Cable,
|
|
||||||
Connector,
|
|
||||||
MateComponent,
|
|
||||||
MatePin,
|
|
||||||
Metadata,
|
|
||||||
Options,
|
|
||||||
Tweak,
|
|
||||||
Side,
|
|
||||||
)
|
|
||||||
from wireviz.svgembed import embed_svg_images_file
|
|
||||||
from wireviz.wv_bom import (
|
|
||||||
HEADER_MPN,
|
|
||||||
HEADER_PN,
|
|
||||||
HEADER_SPN,
|
|
||||||
bom_list,
|
|
||||||
component_table_entry,
|
|
||||||
generate_bom,
|
|
||||||
get_additional_component_table,
|
|
||||||
pn_info_string,
|
|
||||||
)
|
|
||||||
from wireviz.wv_colors import get_color_hex, translate_color
|
|
||||||
from wireviz.wv_gv_html import (
|
|
||||||
html_bgcolor,
|
|
||||||
html_bgcolor_attr,
|
|
||||||
html_caption,
|
|
||||||
html_colorbar,
|
|
||||||
html_image,
|
|
||||||
html_line_breaks,
|
|
||||||
nested_html_table,
|
|
||||||
remove_links,
|
|
||||||
)
|
|
||||||
from wireviz.wv_helper import (
|
|
||||||
awg_equiv,
|
|
||||||
flatten2d,
|
|
||||||
is_arrow,
|
|
||||||
mm2_equiv,
|
|
||||||
open_file_read,
|
|
||||||
open_file_write,
|
|
||||||
tuplelist2tsv,
|
|
||||||
)
|
|
||||||
from wireviz.wv_html import generate_html_output
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Harness:
|
|
||||||
metadata: Metadata
|
|
||||||
options: Options
|
|
||||||
tweak: Tweak
|
|
||||||
|
|
||||||
def __post_init__(self):
|
|
||||||
self.connectors = {}
|
|
||||||
self.cables = {}
|
|
||||||
self.mates = []
|
|
||||||
self._bom = [] # Internal Cache for generated bom
|
|
||||||
self.additional_bom_items = []
|
|
||||||
|
|
||||||
def add_connector(self, name: str, *args, **kwargs) -> None:
|
|
||||||
self.connectors[name] = Connector(name, *args, **kwargs)
|
|
||||||
|
|
||||||
def add_cable(self, name: str, *args, **kwargs) -> None:
|
|
||||||
self.cables[name] = Cable(name, *args, **kwargs)
|
|
||||||
|
|
||||||
def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_type) -> None:
|
|
||||||
self.mates.append(MatePin(from_name, from_pin, to_name, to_pin, arrow_type))
|
|
||||||
self.connectors[from_name].activate_pin(from_pin, Side.RIGHT)
|
|
||||||
self.connectors[to_name].activate_pin(to_pin, Side.LEFT)
|
|
||||||
|
|
||||||
def add_mate_component(self, from_name, to_name, arrow_type) -> None:
|
|
||||||
self.mates.append(MateComponent(from_name, to_name, arrow_type))
|
|
||||||
|
|
||||||
def add_bom_item(self, item: dict) -> None:
|
|
||||||
self.additional_bom_items.append(item)
|
|
||||||
|
|
||||||
def connect(
|
|
||||||
self,
|
|
||||||
from_name: str,
|
|
||||||
from_pin: (int, str),
|
|
||||||
via_name: str,
|
|
||||||
via_wire: (int, str),
|
|
||||||
to_name: str,
|
|
||||||
to_pin: (int, str),
|
|
||||||
) -> None:
|
|
||||||
# check from and to connectors
|
|
||||||
for (name, pin) in zip([from_name, to_name], [from_pin, to_pin]):
|
|
||||||
if name is not None and name in self.connectors:
|
|
||||||
connector = self.connectors[name]
|
|
||||||
# check if provided name is ambiguous
|
|
||||||
if pin in connector.pins and pin in connector.pinlabels:
|
|
||||||
if connector.pins.index(pin) != connector.pinlabels.index(pin):
|
|
||||||
raise Exception(
|
|
||||||
f"{name}:{pin} is defined both in pinlabels and pins, for different pins."
|
|
||||||
)
|
|
||||||
# TODO: Maybe issue a warning if present in both lists but referencing the same pin?
|
|
||||||
if pin in connector.pinlabels:
|
|
||||||
if connector.pinlabels.count(pin) > 1:
|
|
||||||
raise Exception(f"{name}:{pin} is defined more than once.")
|
|
||||||
index = connector.pinlabels.index(pin)
|
|
||||||
pin = connector.pins[index] # map pin name to pin number
|
|
||||||
if name == from_name:
|
|
||||||
from_pin = pin
|
|
||||||
if name == to_name:
|
|
||||||
to_pin = pin
|
|
||||||
if not pin in connector.pins:
|
|
||||||
raise Exception(f"{name}:{pin} not found.")
|
|
||||||
|
|
||||||
# check via cable
|
|
||||||
if via_name in self.cables:
|
|
||||||
cable = self.cables[via_name]
|
|
||||||
# check if provided name is ambiguous
|
|
||||||
if via_wire in cable.colors and via_wire in cable.wirelabels:
|
|
||||||
if cable.colors.index(via_wire) != cable.wirelabels.index(via_wire):
|
|
||||||
raise Exception(
|
|
||||||
f"{via_name}:{via_wire} is defined both in colors and wirelabels, for different wires."
|
|
||||||
)
|
|
||||||
# TODO: Maybe issue a warning if present in both lists but referencing the same wire?
|
|
||||||
if via_wire in cable.colors:
|
|
||||||
if cable.colors.count(via_wire) > 1:
|
|
||||||
raise Exception(
|
|
||||||
f"{via_name}:{via_wire} is used for more than one wire."
|
|
||||||
)
|
|
||||||
# list index starts at 0, wire IDs start at 1
|
|
||||||
via_wire = cable.colors.index(via_wire) + 1
|
|
||||||
elif via_wire in cable.wirelabels:
|
|
||||||
if cable.wirelabels.count(via_wire) > 1:
|
|
||||||
raise Exception(
|
|
||||||
f"{via_name}:{via_wire} is used for more than one wire."
|
|
||||||
)
|
|
||||||
via_wire = (
|
|
||||||
cable.wirelabels.index(via_wire) + 1
|
|
||||||
) # list index starts at 0, wire IDs start at 1
|
|
||||||
|
|
||||||
# perform the actual connection
|
|
||||||
self.cables[via_name].connect(from_name, from_pin, via_wire, to_name, to_pin)
|
|
||||||
if from_name in self.connectors:
|
|
||||||
self.connectors[from_name].activate_pin(from_pin, Side.RIGHT)
|
|
||||||
if to_name in self.connectors:
|
|
||||||
self.connectors[to_name].activate_pin(to_pin, Side.LEFT)
|
|
||||||
|
|
||||||
def create_graph(self) -> Graph:
|
|
||||||
dot = Graph()
|
|
||||||
dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n")
|
|
||||||
dot.body.append(f"// {APP_URL}\n")
|
|
||||||
dot.attr(
|
|
||||||
"graph",
|
|
||||||
rankdir="LR",
|
|
||||||
ranksep="2",
|
|
||||||
bgcolor=wv_colors.translate_color(self.options.bgcolor, "HEX"),
|
|
||||||
nodesep="0.33",
|
|
||||||
fontname=self.options.fontname,
|
|
||||||
)
|
|
||||||
dot.attr(
|
|
||||||
"node",
|
|
||||||
shape="none",
|
|
||||||
width="0",
|
|
||||||
height="0",
|
|
||||||
margin="0", # Actual size of the node is entirely determined by the label.
|
|
||||||
style="filled",
|
|
||||||
fillcolor=wv_colors.translate_color(self.options.bgcolor_node, "HEX"),
|
|
||||||
fontname=self.options.fontname,
|
|
||||||
)
|
|
||||||
dot.attr("edge", style="bold", fontname=self.options.fontname)
|
|
||||||
|
|
||||||
for connector in self.connectors.values():
|
|
||||||
|
|
||||||
# If no wires connected (except maybe loop wires)?
|
|
||||||
if not (connector.ports_left or connector.ports_right):
|
|
||||||
connector.ports_left = True # Use left side pins.
|
|
||||||
|
|
||||||
html = []
|
|
||||||
# fmt: off
|
|
||||||
rows = [[f'{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}'
|
|
||||||
if connector.show_name else None],
|
|
||||||
[pn_info_string(HEADER_PN, None, remove_links(connector.pn)),
|
|
||||||
html_line_breaks(pn_info_string(HEADER_MPN, connector.manufacturer, connector.mpn)),
|
|
||||||
html_line_breaks(pn_info_string(HEADER_SPN, connector.supplier, connector.spn))],
|
|
||||||
[html_line_breaks(connector.type),
|
|
||||||
html_line_breaks(connector.subtype),
|
|
||||||
f'{connector.pincount}-pin' if connector.show_pincount else None,
|
|
||||||
translate_color(connector.color, self.options.color_mode) if connector.color else None,
|
|
||||||
html_colorbar(connector.color)],
|
|
||||||
'<!-- connector table -->' if connector.style != 'simple' else None,
|
|
||||||
[html_image(connector.image)],
|
|
||||||
[html_caption(connector.image)]]
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
rows.extend(get_additional_component_table(self, connector))
|
|
||||||
rows.append([html_line_breaks(connector.notes)])
|
|
||||||
html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor)))
|
|
||||||
|
|
||||||
if connector.style != "simple":
|
|
||||||
pinhtml = []
|
|
||||||
pinhtml.append(
|
|
||||||
'<table border="0" cellspacing="0" cellpadding="3" cellborder="1">'
|
|
||||||
)
|
|
||||||
|
|
||||||
for pinindex, (pinname, pinlabel, pincolor) in enumerate(
|
|
||||||
zip_longest(
|
|
||||||
connector.pins, connector.pinlabels, connector.pincolors
|
|
||||||
)
|
|
||||||
):
|
|
||||||
if (
|
|
||||||
connector.hide_disconnected_pins
|
|
||||||
and not connector.visible_pins.get(pinname, False)
|
|
||||||
):
|
|
||||||
continue
|
|
||||||
|
|
||||||
pinhtml.append(" <tr>")
|
|
||||||
if connector.ports_left:
|
|
||||||
pinhtml.append(f' <td port="p{pinindex+1}l">{pinname}</td>')
|
|
||||||
if pinlabel:
|
|
||||||
pinhtml.append(f" <td>{pinlabel}</td>")
|
|
||||||
if connector.pincolors:
|
|
||||||
if pincolor in wv_colors._color_hex.keys():
|
|
||||||
# fmt: off
|
|
||||||
pinhtml.append(f' <td sides="tbl">{translate_color(pincolor, self.options.color_mode)}</td>')
|
|
||||||
pinhtml.append( ' <td sides="tbr">')
|
|
||||||
pinhtml.append( ' <table border="0" cellborder="1"><tr>')
|
|
||||||
pinhtml.append(f' <td bgcolor="{wv_colors.translate_color(pincolor, "HEX")}" width="8" height="8" fixedsize="true"></td>')
|
|
||||||
pinhtml.append( ' </tr></table>')
|
|
||||||
pinhtml.append( ' </td>')
|
|
||||||
# fmt: on
|
|
||||||
else:
|
|
||||||
pinhtml.append(' <td colspan="2"></td>')
|
|
||||||
|
|
||||||
if connector.ports_right:
|
|
||||||
pinhtml.append(f' <td port="p{pinindex+1}r">{pinname}</td>')
|
|
||||||
pinhtml.append(" </tr>")
|
|
||||||
|
|
||||||
pinhtml.append(" </table>")
|
|
||||||
|
|
||||||
html = [
|
|
||||||
row.replace("<!-- connector table -->", "\n".join(pinhtml))
|
|
||||||
for row in html
|
|
||||||
]
|
|
||||||
|
|
||||||
html = "\n".join(html)
|
|
||||||
dot.node(
|
|
||||||
connector.name,
|
|
||||||
label=f"<\n{html}\n>",
|
|
||||||
shape="box",
|
|
||||||
style="filled",
|
|
||||||
fillcolor=translate_color(self.options.bgcolor_connector, "HEX"),
|
|
||||||
)
|
|
||||||
|
|
||||||
if len(connector.loops) > 0:
|
|
||||||
dot.attr("edge", color="#000000:#ffffff:#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 loop in connector.loops:
|
|
||||||
dot.edge(
|
|
||||||
f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}",
|
|
||||||
f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}",
|
|
||||||
)
|
|
||||||
|
|
||||||
# determine if there are double- or triple-colored wires in the harness;
|
|
||||||
# if so, pad single-color wires to make all wires of equal thickness
|
|
||||||
pad = any(
|
|
||||||
len(colorstr) > 2
|
|
||||||
for cable in self.cables.values()
|
|
||||||
for colorstr in cable.colors
|
|
||||||
)
|
|
||||||
|
|
||||||
for cable in self.cables.values():
|
|
||||||
|
|
||||||
html = []
|
|
||||||
|
|
||||||
awg_fmt = ""
|
|
||||||
if cable.show_equiv:
|
|
||||||
# Only convert units we actually know about, i.e. currently
|
|
||||||
# mm2 and awg --- other units _are_ technically allowed,
|
|
||||||
# and passed through as-is.
|
|
||||||
if cable.gauge_unit == "mm\u00B2":
|
|
||||||
awg_fmt = f" ({awg_equiv(cable.gauge)} AWG)"
|
|
||||||
elif cable.gauge_unit.upper() == "AWG":
|
|
||||||
awg_fmt = f" ({mm2_equiv(cable.gauge)} mm\u00B2)"
|
|
||||||
|
|
||||||
# fmt: off
|
|
||||||
rows = [[f'{html_bgcolor(cable.bgcolor_title)}{remove_links(cable.name)}'
|
|
||||||
if cable.show_name else None],
|
|
||||||
[pn_info_string(HEADER_PN, None,
|
|
||||||
remove_links(cable.pn)) if not isinstance(cable.pn, list) else None,
|
|
||||||
html_line_breaks(pn_info_string(HEADER_MPN,
|
|
||||||
cable.manufacturer if not isinstance(cable.manufacturer, list) else None,
|
|
||||||
cable.mpn if not isinstance(cable.mpn, list) else None)),
|
|
||||||
html_line_breaks(pn_info_string(HEADER_SPN,
|
|
||||||
cable.supplier if not isinstance(cable.supplier, list) else None,
|
|
||||||
cable.spn if not isinstance(cable.spn, list) else None))],
|
|
||||||
[html_line_breaks(cable.type),
|
|
||||||
f'{cable.wirecount}x' if cable.show_wirecount else None,
|
|
||||||
f'{cable.gauge} {cable.gauge_unit}{awg_fmt}' if cable.gauge else None,
|
|
||||||
'+ S' if cable.shield else None,
|
|
||||||
f'{cable.length} {cable.length_unit}' if cable.length > 0 else None,
|
|
||||||
translate_color(cable.color, self.options.color_mode) if cable.color else None,
|
|
||||||
html_colorbar(cable.color)],
|
|
||||||
'<!-- wire table -->',
|
|
||||||
[html_image(cable.image)],
|
|
||||||
[html_caption(cable.image)]]
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
rows.extend(get_additional_component_table(self, cable))
|
|
||||||
rows.append([html_line_breaks(cable.notes)])
|
|
||||||
html.extend(nested_html_table(rows, html_bgcolor_attr(cable.bgcolor)))
|
|
||||||
|
|
||||||
wirehtml = []
|
|
||||||
# conductor table
|
|
||||||
wirehtml.append('<table border="0" cellspacing="0" cellborder="0">')
|
|
||||||
wirehtml.append(" <tr><td> </td></tr>")
|
|
||||||
|
|
||||||
for i, (connection_color, wirelabel) in enumerate(
|
|
||||||
zip_longest(cable.colors, cable.wirelabels), 1
|
|
||||||
):
|
|
||||||
wirehtml.append(" <tr>")
|
|
||||||
wirehtml.append(f" <td><!-- {i}_in --></td>")
|
|
||||||
wirehtml.append(f" <td>")
|
|
||||||
|
|
||||||
wireinfo = []
|
|
||||||
if cable.show_wirenumbers:
|
|
||||||
wireinfo.append(str(i))
|
|
||||||
colorstr = wv_colors.translate_color(
|
|
||||||
connection_color, self.options.color_mode
|
|
||||||
)
|
|
||||||
if colorstr:
|
|
||||||
wireinfo.append(colorstr)
|
|
||||||
if cable.wirelabels:
|
|
||||||
wireinfo.append(wirelabel if wirelabel is not None else "")
|
|
||||||
wirehtml.append(f' {":".join(wireinfo)}')
|
|
||||||
|
|
||||||
wirehtml.append(f" </td>")
|
|
||||||
wirehtml.append(f" <td><!-- {i}_out --></td>")
|
|
||||||
wirehtml.append(" </tr>")
|
|
||||||
|
|
||||||
# fmt: off
|
|
||||||
bgcolors = ['#000000'] + get_color_hex(connection_color, pad=pad) + ['#000000']
|
|
||||||
wirehtml.append(f" <tr>")
|
|
||||||
wirehtml.append(f' <td colspan="3" border="0" cellspacing="0" cellpadding="0" port="w{i}" height="{(2 * len(bgcolors))}">')
|
|
||||||
wirehtml.append(' <table cellspacing="0" cellborder="0" border="0">')
|
|
||||||
for j, bgcolor in enumerate(bgcolors[::-1]): # Reverse to match the curved wires when more than 2 colors
|
|
||||||
wirehtml.append(f' <tr><td colspan="3" cellpadding="0" height="2" bgcolor="{bgcolor if bgcolor != "" else wv_colors.default_color}" border="0"></td></tr>')
|
|
||||||
wirehtml.append(" </table>")
|
|
||||||
wirehtml.append(" </td>")
|
|
||||||
wirehtml.append(" </tr>")
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
# for bundles, individual wires can have part information
|
|
||||||
if cable.category == "bundle":
|
|
||||||
# create a list of wire parameters
|
|
||||||
wireidentification = []
|
|
||||||
if isinstance(cable.pn, list):
|
|
||||||
wireidentification.append(
|
|
||||||
pn_info_string(
|
|
||||||
HEADER_PN, None, remove_links(cable.pn[i - 1])
|
|
||||||
)
|
|
||||||
)
|
|
||||||
manufacturer_info = pn_info_string(
|
|
||||||
HEADER_MPN,
|
|
||||||
cable.manufacturer[i - 1]
|
|
||||||
if isinstance(cable.manufacturer, list)
|
|
||||||
else None,
|
|
||||||
cable.mpn[i - 1] if isinstance(cable.mpn, list) else None,
|
|
||||||
)
|
|
||||||
supplier_info = pn_info_string(
|
|
||||||
HEADER_SPN,
|
|
||||||
cable.supplier[i - 1]
|
|
||||||
if isinstance(cable.supplier, list)
|
|
||||||
else None,
|
|
||||||
cable.spn[i - 1] if isinstance(cable.spn, list) else None,
|
|
||||||
)
|
|
||||||
if manufacturer_info:
|
|
||||||
wireidentification.append(html_line_breaks(manufacturer_info))
|
|
||||||
if supplier_info:
|
|
||||||
wireidentification.append(html_line_breaks(supplier_info))
|
|
||||||
# print parameters into a table row under the wire
|
|
||||||
if len(wireidentification) > 0:
|
|
||||||
# fmt: off
|
|
||||||
wirehtml.append(' <tr><td colspan="3">')
|
|
||||||
wirehtml.append(' <table border="0" cellspacing="0" cellborder="0"><tr>')
|
|
||||||
for attrib in wireidentification:
|
|
||||||
wirehtml.append(f" <td>{attrib}</td>")
|
|
||||||
wirehtml.append(" </tr></table>")
|
|
||||||
wirehtml.append(" </td></tr>")
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
if cable.shield:
|
|
||||||
wirehtml.append(" <tr><td> </td></tr>") # spacer
|
|
||||||
wirehtml.append(" <tr>")
|
|
||||||
wirehtml.append(" <td><!-- s_in --></td>")
|
|
||||||
wirehtml.append(" <td>Shield</td>")
|
|
||||||
wirehtml.append(" <td><!-- s_out --></td>")
|
|
||||||
wirehtml.append(" </tr>")
|
|
||||||
if isinstance(cable.shield, str):
|
|
||||||
# shield is shown with specified color and black borders
|
|
||||||
shield_color_hex = wv_colors.get_color_hex(cable.shield)[0]
|
|
||||||
attributes = (
|
|
||||||
f'height="6" bgcolor="{shield_color_hex}" border="2" sides="tb"'
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
# shield is shown as a thin black wire
|
|
||||||
attributes = f'height="2" bgcolor="#000000" border="0"'
|
|
||||||
# fmt: off
|
|
||||||
wirehtml.append(f' <tr><td colspan="3" cellpadding="0" {attributes} port="ws"></td></tr>')
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
wirehtml.append(" <tr><td> </td></tr>")
|
|
||||||
wirehtml.append(" </table>")
|
|
||||||
|
|
||||||
html = [
|
|
||||||
row.replace("<!-- wire table -->", "\n".join(wirehtml)) for row in html
|
|
||||||
]
|
|
||||||
|
|
||||||
# connections
|
|
||||||
for connection in cable.connections:
|
|
||||||
if isinstance(connection.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.via_port - 1], pad=pad
|
|
||||||
)
|
|
||||||
+ ["#000000"]
|
|
||||||
),
|
|
||||||
)
|
|
||||||
else: # it's a shield connection
|
|
||||||
# shield is shown with specified color and black borders, or as a thin black wire otherwise
|
|
||||||
dot.attr(
|
|
||||||
"edge",
|
|
||||||
color=":".join(["#000000", shield_color_hex, "#000000"])
|
|
||||||
if isinstance(cable.shield, str)
|
|
||||||
else "#000000",
|
|
||||||
)
|
|
||||||
if connection.from_pin is not None: # connect to left
|
|
||||||
from_connector = self.connectors[connection.from_name]
|
|
||||||
from_pin_index = from_connector.pins.index(connection.from_pin)
|
|
||||||
from_port_str = (
|
|
||||||
f":p{from_pin_index+1}r"
|
|
||||||
if from_connector.style != "simple"
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
code_left_1 = f"{connection.from_name}{from_port_str}:e"
|
|
||||||
code_left_2 = f"{cable.name}:w{connection.via_port}:w"
|
|
||||||
dot.edge(code_left_1, code_left_2)
|
|
||||||
if from_connector.show_name:
|
|
||||||
from_info = [
|
|
||||||
str(connection.from_name),
|
|
||||||
str(connection.from_pin),
|
|
||||||
]
|
|
||||||
if from_connector.pinlabels:
|
|
||||||
pinlabel = from_connector.pinlabels[from_pin_index]
|
|
||||||
if pinlabel != "":
|
|
||||||
from_info.append(pinlabel)
|
|
||||||
from_string = ":".join(from_info)
|
|
||||||
else:
|
|
||||||
from_string = ""
|
|
||||||
html = [
|
|
||||||
row.replace(f"<!-- {connection.via_port}_in -->", from_string)
|
|
||||||
for row in html
|
|
||||||
]
|
|
||||||
if connection.to_pin is not None: # connect to right
|
|
||||||
to_connector = self.connectors[connection.to_name]
|
|
||||||
to_pin_index = to_connector.pins.index(connection.to_pin)
|
|
||||||
to_port_str = (
|
|
||||||
f":p{to_pin_index+1}l" if to_connector.style != "simple" else ""
|
|
||||||
)
|
|
||||||
code_right_1 = f"{cable.name}:w{connection.via_port}:e"
|
|
||||||
code_right_2 = f"{connection.to_name}{to_port_str}:w"
|
|
||||||
dot.edge(code_right_1, code_right_2)
|
|
||||||
if to_connector.show_name:
|
|
||||||
to_info = [str(connection.to_name), str(connection.to_pin)]
|
|
||||||
if to_connector.pinlabels:
|
|
||||||
pinlabel = to_connector.pinlabels[to_pin_index]
|
|
||||||
if pinlabel != "":
|
|
||||||
to_info.append(pinlabel)
|
|
||||||
to_string = ":".join(to_info)
|
|
||||||
else:
|
|
||||||
to_string = ""
|
|
||||||
html = [
|
|
||||||
row.replace(f"<!-- {connection.via_port}_out -->", to_string)
|
|
||||||
for row in html
|
|
||||||
]
|
|
||||||
|
|
||||||
style, bgcolor = (
|
|
||||||
("filled,dashed", self.options.bgcolor_bundle)
|
|
||||||
if cable.category == "bundle"
|
|
||||||
else ("filled", self.options.bgcolor_cable)
|
|
||||||
)
|
|
||||||
html = "\n".join(html)
|
|
||||||
dot.node(
|
|
||||||
cable.name,
|
|
||||||
label=f"<\n{html}\n>",
|
|
||||||
shape="box",
|
|
||||||
style=style,
|
|
||||||
fillcolor=translate_color(bgcolor, "HEX"),
|
|
||||||
)
|
|
||||||
|
|
||||||
def typecheck(name: str, value: Any, expect: type) -> None:
|
|
||||||
if not isinstance(value, expect):
|
|
||||||
raise Exception(
|
|
||||||
f"Unexpected value type of {name}: Expected {expect}, got {type(value)}\n{value}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# TODO?: Differ between override attributes and HTML?
|
|
||||||
if self.tweak.override is not None:
|
|
||||||
typecheck("tweak.override", self.tweak.override, dict)
|
|
||||||
for k, d in self.tweak.override.items():
|
|
||||||
typecheck(f"tweak.override.{k} key", k, str)
|
|
||||||
typecheck(f"tweak.override.{k} value", d, dict)
|
|
||||||
for a, v in d.items():
|
|
||||||
typecheck(f"tweak.override.{k}.{a} key", a, str)
|
|
||||||
typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None)))
|
|
||||||
|
|
||||||
# Override generated attributes of selected entries matching tweak.override.
|
|
||||||
for i, entry in enumerate(dot.body):
|
|
||||||
if isinstance(entry, str):
|
|
||||||
# Find a possibly quoted keyword after leading TAB(s) and followed by [ ].
|
|
||||||
match = re.match(
|
|
||||||
r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S
|
|
||||||
)
|
|
||||||
keyword = match and match[2]
|
|
||||||
if keyword in self.tweak.override.keys():
|
|
||||||
for attr, value in self.tweak.override[keyword].items():
|
|
||||||
if value is None:
|
|
||||||
entry, n_subs = re.subn(
|
|
||||||
f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry
|
|
||||||
)
|
|
||||||
if n_subs < 1:
|
|
||||||
print(
|
|
||||||
f"Harness.create_graph() warning: {attr} not found in {keyword}!"
|
|
||||||
)
|
|
||||||
elif n_subs > 1:
|
|
||||||
print(
|
|
||||||
f"Harness.create_graph() warning: {attr} removed {n_subs} times in {keyword}!"
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if len(value) == 0 or " " in value:
|
|
||||||
value = value.replace('"', r"\"")
|
|
||||||
value = f'"{value}"'
|
|
||||||
entry, n_subs = re.subn(
|
|
||||||
f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry
|
|
||||||
)
|
|
||||||
if n_subs < 1:
|
|
||||||
# If attr not found, then append it
|
|
||||||
entry = re.sub(r"\]$", f" {attr}={value}]", entry)
|
|
||||||
elif n_subs > 1:
|
|
||||||
print(
|
|
||||||
f"Harness.create_graph() warning: {attr} overridden {n_subs} times in {keyword}!"
|
|
||||||
)
|
|
||||||
|
|
||||||
dot.body[i] = entry
|
|
||||||
|
|
||||||
if self.tweak.append is not None:
|
|
||||||
if isinstance(self.tweak.append, list):
|
|
||||||
for i, element in enumerate(self.tweak.append, 1):
|
|
||||||
typecheck(f"tweak.append[{i}]", element, str)
|
|
||||||
dot.body.extend(self.tweak.append)
|
|
||||||
else:
|
|
||||||
typecheck("tweak.append", self.tweak.append, str)
|
|
||||||
dot.body.append(self.tweak.append)
|
|
||||||
|
|
||||||
for mate in self.mates:
|
|
||||||
if mate.shape[0] == "<" and mate.shape[-1] == ">":
|
|
||||||
dir = "both"
|
|
||||||
elif mate.shape[0] == "<":
|
|
||||||
dir = "back"
|
|
||||||
elif mate.shape[-1] == ">":
|
|
||||||
dir = "forward"
|
|
||||||
else:
|
|
||||||
dir = "none"
|
|
||||||
|
|
||||||
if isinstance(mate, MatePin):
|
|
||||||
color = "#000000"
|
|
||||||
elif isinstance(mate, MateComponent):
|
|
||||||
color = "#000000:#000000"
|
|
||||||
else:
|
|
||||||
raise Exception(f"{mate} is an unknown mate")
|
|
||||||
|
|
||||||
from_connector = self.connectors[mate.from_name]
|
|
||||||
if (
|
|
||||||
isinstance(mate, MatePin)
|
|
||||||
and self.connectors[mate.from_name].style != "simple"
|
|
||||||
):
|
|
||||||
from_pin_index = from_connector.pins.index(mate.from_pin)
|
|
||||||
from_port_str = f":p{from_pin_index+1}r"
|
|
||||||
else: # MateComponent or style == 'simple'
|
|
||||||
from_port_str = ""
|
|
||||||
if (
|
|
||||||
isinstance(mate, MatePin)
|
|
||||||
and self.connectors[mate.to_name].style != "simple"
|
|
||||||
):
|
|
||||||
to_pin_index = to_connector.pins.index(mate.to_pin)
|
|
||||||
to_port_str = (
|
|
||||||
f":p{to_pin_index+1}l"
|
|
||||||
if isinstance(mate, MatePin)
|
|
||||||
and self.connectors[mate.to_name].style != "simple"
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
else: # MateComponent or style == 'simple'
|
|
||||||
to_port_str = ""
|
|
||||||
code_from = f"{mate.from_name}{from_port_str}:e"
|
|
||||||
to_connector = self.connectors[mate.to_name]
|
|
||||||
code_to = f"{mate.to_name}{to_port_str}:w"
|
|
||||||
|
|
||||||
dot.attr("edge", color=color, style="dashed", dir=dir)
|
|
||||||
dot.edge(code_from, code_to)
|
|
||||||
|
|
||||||
return dot
|
|
||||||
|
|
||||||
# cache for the GraphViz Graph object
|
|
||||||
# do not access directly, use self.graph instead
|
|
||||||
_graph = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def graph(self):
|
|
||||||
if not self._graph: # no cached graph exists, generate one
|
|
||||||
self._graph = self.create_graph()
|
|
||||||
return self._graph # return cached graph
|
|
||||||
|
|
||||||
@property
|
|
||||||
def png(self):
|
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
graph = self.graph
|
|
||||||
data = BytesIO()
|
|
||||||
data.write(graph.pipe(format="png"))
|
|
||||||
data.seek(0)
|
|
||||||
return data.read()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def svg(self):
|
|
||||||
graph = self.graph
|
|
||||||
return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd())
|
|
||||||
|
|
||||||
|
|
||||||
def output(
|
|
||||||
self,
|
|
||||||
filename: (str, Path),
|
|
||||||
view: bool = False,
|
|
||||||
cleanup: bool = True,
|
|
||||||
fmt: tuple = ("html", "png", "svg", "tsv"),
|
|
||||||
) -> None:
|
|
||||||
# graphical output
|
|
||||||
graph = self.graph
|
|
||||||
svg_already_exists = Path(
|
|
||||||
f"{filename}.svg"
|
|
||||||
).exists() # if SVG already exists, do not delete later
|
|
||||||
# graphical output
|
|
||||||
for f in fmt:
|
|
||||||
if f in ("png", "svg", "html"):
|
|
||||||
if f == "html": # if HTML format is specified,
|
|
||||||
f = "svg" # generate SVG for embedding into HTML
|
|
||||||
# SVG file will be renamed/deleted later
|
|
||||||
_filename = f"{filename}.tmp" if f == "svg" else filename
|
|
||||||
# TODO: prevent rendering SVG twice when both SVG and HTML are specified
|
|
||||||
graph.format = f
|
|
||||||
graph.render(filename=_filename, view=view, cleanup=cleanup)
|
|
||||||
# embed images into SVG output
|
|
||||||
if "svg" in fmt or "html" in fmt:
|
|
||||||
embed_svg_images_file(f"{filename}.tmp.svg")
|
|
||||||
# GraphViz output
|
|
||||||
if "gv" in fmt:
|
|
||||||
graph.save(filename=f"{filename}.gv")
|
|
||||||
# BOM output
|
|
||||||
bomlist = bom_list(self.bom())
|
|
||||||
if "tsv" in fmt:
|
|
||||||
open_file_write(f"{filename}.bom.tsv").write(tuplelist2tsv(bomlist))
|
|
||||||
if "csv" in fmt:
|
|
||||||
# TODO: implement CSV output (preferrably using CSV library)
|
|
||||||
print("CSV output is not yet supported")
|
|
||||||
# HTML output
|
|
||||||
if "html" in fmt:
|
|
||||||
generate_html_output(filename, bomlist, self.metadata, self.options)
|
|
||||||
# PDF output
|
|
||||||
if "pdf" in fmt:
|
|
||||||
# TODO: implement PDF output
|
|
||||||
print("PDF output is not yet supported")
|
|
||||||
# delete SVG if not needed
|
|
||||||
if "html" in fmt and not "svg" in fmt:
|
|
||||||
# SVG file was just needed to generate HTML
|
|
||||||
Path(f"{filename}.tmp.svg").unlink()
|
|
||||||
elif "svg" in fmt:
|
|
||||||
Path(f"{filename}.tmp.svg").replace(f"{filename}.svg")
|
|
||||||
|
|
||||||
def bom(self):
|
|
||||||
if not self._bom:
|
|
||||||
self._bom = generate_bom(self)
|
|
||||||
return self._bom
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Please don't import anything in this file to avoid issues when it is imported in setup.py
|
# Please don't import anything in this file to avoid issues when it is imported in setup.py
|
||||||
|
|
||||||
__version__ = "0.4-dev"
|
__version__ = "0.4-dev251"
|
||||||
|
|
||||||
CMD_NAME = "wireviz" # Lower case command and module name
|
CMD_NAME = "wireviz" # Lower case command and module name
|
||||||
APP_NAME = "WireViz" # Application name in texts meant to be human readable
|
APP_NAME = "WireViz" # Application name in texts meant to be human readable
|
||||||
|
|||||||
@ -1,52 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import base64
|
|
||||||
import re
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"}
|
|
||||||
|
|
||||||
|
|
||||||
def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str:
|
|
||||||
images_b64 = {} # cache of base64-encoded images
|
|
||||||
|
|
||||||
def image_tag(pre: str, url: str, post: str) -> str:
|
|
||||||
return f'<image{pre} xlink:href="{url}"{post}>'
|
|
||||||
|
|
||||||
def replace(match: re.Match) -> str:
|
|
||||||
imgurl = match["URL"]
|
|
||||||
if not imgurl in images_b64: # only encode/cache every unique URL once
|
|
||||||
imgurl_abs = (Path(base_path) / imgurl).resolve()
|
|
||||||
image = imgurl_abs.read_bytes()
|
|
||||||
images_b64[imgurl] = base64.b64encode(image).decode("utf-8")
|
|
||||||
return image_tag(
|
|
||||||
match["PRE"] or "",
|
|
||||||
f"data:image/{get_mime_subtype(imgurl)};base64, {images_b64[imgurl]}",
|
|
||||||
match["POST"] or "",
|
|
||||||
)
|
|
||||||
|
|
||||||
pattern = re.compile(
|
|
||||||
image_tag(r"(?P<PRE> [^>]*?)?", r'(?P<URL>[^"]*?)', r"(?P<POST> [^>]*?)?"),
|
|
||||||
re.IGNORECASE,
|
|
||||||
)
|
|
||||||
return pattern.sub(replace, svg_in)
|
|
||||||
|
|
||||||
|
|
||||||
def get_mime_subtype(filename: Union[str, Path]) -> str:
|
|
||||||
mime_subtype = Path(filename).suffix.lstrip(".").lower()
|
|
||||||
if mime_subtype in mime_subtype_replacements:
|
|
||||||
mime_subtype = mime_subtype_replacements[mime_subtype]
|
|
||||||
return mime_subtype
|
|
||||||
|
|
||||||
|
|
||||||
def embed_svg_images_file(
|
|
||||||
filename_in: Union[str, Path], overwrite: bool = True
|
|
||||||
) -> None:
|
|
||||||
filename_in = Path(filename_in).resolve()
|
|
||||||
filename_out = filename_in.with_suffix(".b64.svg")
|
|
||||||
filename_out.write_text(
|
|
||||||
embed_svg_images(filename_in.read_text(), filename_in.parent)
|
|
||||||
)
|
|
||||||
if overwrite:
|
|
||||||
filename_out.replace(filename_in)
|
|
||||||
@ -7,13 +7,12 @@ import sys
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
script_path = Path(__file__).absolute()
|
script_path = Path(__file__).absolute()
|
||||||
|
sys.path.insert(0, str(script_path.parent.parent.parent)) # to find wireviz module
|
||||||
sys.path.insert(0, str(script_path.parent.parent)) # to find wireviz module
|
|
||||||
from wv_helper import open_file_append, open_file_read, open_file_write
|
|
||||||
|
|
||||||
from wireviz import APP_NAME, __version__, wireviz
|
from wireviz import APP_NAME, __version__, wireviz
|
||||||
|
from wireviz.wv_utils import open_file_append, open_file_read, open_file_write
|
||||||
|
|
||||||
dir = script_path.parent.parent.parent
|
dir = script_path.parent.parent.parent.parent
|
||||||
readme = "readme.md"
|
readme = "readme.md"
|
||||||
groups = {
|
groups = {
|
||||||
"examples": {
|
"examples": {
|
||||||
@ -32,10 +31,11 @@ groups = {
|
|||||||
"path": dir / "examples",
|
"path": dir / "examples",
|
||||||
"prefix": "demo",
|
"prefix": "demo",
|
||||||
},
|
},
|
||||||
|
**{p.stem: {"path": p} for p in (dir / "tests").glob("**")},
|
||||||
}
|
}
|
||||||
|
|
||||||
input_extensions = [".yml"]
|
input_extensions = [".yml"]
|
||||||
extensions_not_containing_graphviz_output = [".gv", ".bom.tsv"]
|
extensions_not_containing_graphviz_output = [".gv", ".tsv"]
|
||||||
extensions_containing_graphviz_output = [".png", ".svg", ".html"]
|
extensions_containing_graphviz_output = [".png", ".svg", ".html"]
|
||||||
generated_extensions = (
|
generated_extensions = (
|
||||||
extensions_not_containing_graphviz_output + extensions_containing_graphviz_output
|
extensions_not_containing_graphviz_output + extensions_containing_graphviz_output
|
||||||
@ -44,7 +44,7 @@ generated_extensions = (
|
|||||||
|
|
||||||
def collect_filenames(description, groupkey, ext_list):
|
def collect_filenames(description, groupkey, ext_list):
|
||||||
path = groups[groupkey]["path"]
|
path = groups[groupkey]["path"]
|
||||||
patterns = [f"{groups[groupkey]['prefix']}*{ext}" for ext in ext_list]
|
patterns = [f"{groups[groupkey].get('prefix', '')}*{ext}" for ext in ext_list]
|
||||||
if ext_list != input_extensions and readme in groups[groupkey]:
|
if ext_list != input_extensions and readme in groups[groupkey]:
|
||||||
patterns.append(readme)
|
patterns.append(readme)
|
||||||
print(f'{description} {groupkey} in "{path}"')
|
print(f'{description} {groupkey} in "{path}"')
|
||||||
@ -88,7 +88,7 @@ def build_generated(groupkeys):
|
|||||||
|
|
||||||
out.write(f"\n\n")
|
out.write(f"\n\n")
|
||||||
out.write(
|
out.write(
|
||||||
f"[Source]({yaml_file.name}) - [Bill of Materials]({yaml_file.stem}.bom.tsv)\n\n\n"
|
f"[Source]({yaml_file.name}) - [Bill of Materials]({yaml_file.stem}.tsv)\n\n\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ def clean_generated(groupkeys):
|
|||||||
for filename in collect_filenames("Cleaning", key, generated_extensions):
|
for filename in collect_filenames("Cleaning", key, generated_extensions):
|
||||||
if filename.is_file():
|
if filename.is_file():
|
||||||
print(f' rm "{filename}"')
|
print(f' rm "{filename}"')
|
||||||
Path(filename).unlink()
|
filename.unlink()
|
||||||
|
|
||||||
|
|
||||||
def compare_generated(groupkeys, branch="", include_graphviz_output=False):
|
def compare_generated(groupkeys, branch="", include_graphviz_output=False):
|
||||||
@ -10,9 +10,9 @@ import yaml
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sys.path.insert(0, str(Path(__file__).parent.parent)) # add src/wireviz to PATH
|
sys.path.insert(0, str(Path(__file__).parent.parent)) # add src/wireviz to PATH
|
||||||
|
|
||||||
from wireviz.DataClasses import Metadata, Options, Tweak
|
from wireviz.wv_dataclasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
|
||||||
from wireviz.Harness import Harness
|
from wireviz.wv_harness import Harness
|
||||||
from wireviz.wv_helper import (
|
from wireviz.wv_utils import (
|
||||||
expand,
|
expand,
|
||||||
get_single_key_and_value,
|
get_single_key_and_value,
|
||||||
is_arrow,
|
is_arrow,
|
||||||
@ -34,7 +34,7 @@ def parse(
|
|||||||
and outputs the result as one or more files and/or as a function return value
|
and outputs the result as one or more files and/or as a function return value
|
||||||
|
|
||||||
Accepted inputs:
|
Accepted inputs:
|
||||||
* A path to a YAML source file to parse
|
* A Path object or a path-like string pointing to a YAML source file to parse
|
||||||
* A string containing the YAML data to parse
|
* A string containing the YAML data to parse
|
||||||
* A Python Dict containing the pre-parsed YAML data
|
* A Python Dict containing the pre-parsed YAML data
|
||||||
|
|
||||||
@ -93,7 +93,8 @@ def parse(
|
|||||||
output_file = output_dir / output_name
|
output_file = output_dir / output_name
|
||||||
|
|
||||||
if yaml_file:
|
if yaml_file:
|
||||||
# if reading from file, ensure that input file's parent directory is included in image_paths
|
# if reading from file, ensure that input file's parent directory
|
||||||
|
# is included in image_paths
|
||||||
default_image_path = yaml_file.parent.resolve()
|
default_image_path = yaml_file.parent.resolve()
|
||||||
if not default_image_path in [Path(x).resolve() for x in image_paths]:
|
if not default_image_path in [Path(x).resolve() for x in image_paths]:
|
||||||
image_paths.append(default_image_path)
|
image_paths.append(default_image_path)
|
||||||
@ -128,7 +129,8 @@ def parse(
|
|||||||
if len(yaml_data[sec]) > 0: # section has contents
|
if len(yaml_data[sec]) > 0: # section has contents
|
||||||
if ty == dict:
|
if ty == dict:
|
||||||
for key, attribs in yaml_data[sec].items():
|
for key, attribs in yaml_data[sec].items():
|
||||||
# The Image dataclass might need to open an image file with a relative path.
|
# The Image dataclass might need to open
|
||||||
|
# an image file with a relative path.
|
||||||
image = attribs.get("image")
|
image = attribs.get("image")
|
||||||
if isinstance(image, dict):
|
if isinstance(image, dict):
|
||||||
image_path = image["src"]
|
image_path = image["src"]
|
||||||
@ -164,12 +166,16 @@ def parse(
|
|||||||
autogenerated_designators[template] = (
|
autogenerated_designators[template] = (
|
||||||
autogenerated_designators.get(template, 0) + 1
|
autogenerated_designators.get(template, 0) + 1
|
||||||
)
|
)
|
||||||
designator = f"__{template}_{autogenerated_designators[template]}"
|
designator = (
|
||||||
|
f"{AUTOGENERATED_PREFIX}"
|
||||||
|
f"{template}_{autogenerated_designators[template]}"
|
||||||
|
)
|
||||||
# check if redefining existing component to different template
|
# check if redefining existing component to different template
|
||||||
if designator in designators_and_templates:
|
if designator in designators_and_templates:
|
||||||
if designators_and_templates[designator] != template:
|
if designators_and_templates[designator] != template:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
f"Trying to redefine {designator} from {designators_and_templates[designator]} to {template}"
|
f"Trying to redefine {designator}"
|
||||||
|
f" from {designators_and_templates[designator]} to {template}"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
designators_and_templates[designator] = template
|
designators_and_templates[designator] = template
|
||||||
@ -201,7 +207,6 @@ def parse(
|
|||||||
expected_type = alternating_types[1 - alternating_types.index(expected_type)]
|
expected_type = alternating_types[1 - alternating_types.index(expected_type)]
|
||||||
|
|
||||||
for connection_set in connection_sets:
|
for connection_set in connection_sets:
|
||||||
|
|
||||||
# figure out number of parallel connections within this set
|
# figure out number of parallel connections within this set
|
||||||
connectioncount = []
|
connectioncount = []
|
||||||
for entry in connection_set:
|
for entry in connection_set:
|
||||||
@ -282,7 +287,7 @@ def parse(
|
|||||||
# generate new connector instance from template
|
# generate new connector instance from template
|
||||||
check_type(designator, template, "connector")
|
check_type(designator, template, "connector")
|
||||||
harness.add_connector(
|
harness.add_connector(
|
||||||
name=designator, **template_connectors[template]
|
designator=designator, **template_connectors[template]
|
||||||
)
|
)
|
||||||
|
|
||||||
elif designator in harness.cables: # existing cable instance
|
elif designator in harness.cables: # existing cable instance
|
||||||
@ -290,7 +295,9 @@ def parse(
|
|||||||
elif template in template_cables.keys():
|
elif template in template_cables.keys():
|
||||||
# generate new cable instance from template
|
# generate new cable instance from template
|
||||||
check_type(designator, template, "cable/arrow")
|
check_type(designator, template, "cable/arrow")
|
||||||
harness.add_cable(name=designator, **template_cables[template])
|
harness.add_cable(
|
||||||
|
designator=designator, **template_cables[template]
|
||||||
|
)
|
||||||
|
|
||||||
elif is_arrow(designator):
|
elif is_arrow(designator):
|
||||||
check_type(designator, template, "cable/arrow")
|
check_type(designator, template, "cable/arrow")
|
||||||
@ -300,7 +307,8 @@ def parse(
|
|||||||
f"{template} is an unknown template/designator/arrow."
|
f"{template} is an unknown template/designator/arrow."
|
||||||
)
|
)
|
||||||
|
|
||||||
alternate_type() # entries in connection set must alternate between connectors and cables/arrows
|
# entries in connection set must alternate between connectors and cables/arrows
|
||||||
|
alternate_type()
|
||||||
|
|
||||||
# transpose connection set list
|
# transpose connection set list
|
||||||
# before: one item per component, one subitem per connection in set
|
# before: one item per component, one subitem per connection in set
|
||||||
@ -355,11 +363,13 @@ def parse(
|
|||||||
# mate two connectors as a whole
|
# mate two connectors as a whole
|
||||||
harness.add_mate_component(from_name, to_name, designator)
|
harness.add_mate_component(from_name, to_name, designator)
|
||||||
|
|
||||||
# harness population completed =============================================
|
|
||||||
|
|
||||||
if "additional_bom_items" in yaml_data:
|
if "additional_bom_items" in yaml_data:
|
||||||
for line in yaml_data["additional_bom_items"]:
|
for line in yaml_data["additional_bom_items"]:
|
||||||
harness.add_bom_item(line)
|
harness.add_additional_bom_item(line)
|
||||||
|
|
||||||
|
# harness population completed =============================================
|
||||||
|
|
||||||
|
harness.populate_bom()
|
||||||
|
|
||||||
if output_formats:
|
if output_formats:
|
||||||
harness.output(filename=output_file, fmt=output_formats, view=False)
|
harness.output(filename=output_file, fmt=output_formats, view=False)
|
||||||
@ -382,23 +392,15 @@ def parse(
|
|||||||
return tuple(returns) if len(returns) != 1 else returns[0]
|
return tuple(returns) if len(returns) != 1 else returns[0]
|
||||||
|
|
||||||
|
|
||||||
def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> (Dict, Path):
|
def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> Tuple[Dict, Path]:
|
||||||
# determine whether inp is a file path, a YAML string, or a Dict
|
# determine whether inp is a file path, a YAML string, or a Dict
|
||||||
if not isinstance(inp, Dict): # received a str or a Path
|
if not isinstance(inp, Dict): # received a str or a Path
|
||||||
try:
|
if isinstance(inp, Path) or (isinstance(inp, str) and not "\n" in inp):
|
||||||
yaml_path = Path(inp).expanduser().resolve(strict=True)
|
yaml_path = Path(inp).expanduser().resolve(strict=True)
|
||||||
# if no FileNotFoundError exception happens, get file contents
|
|
||||||
yaml_str = open_file_read(yaml_path).read()
|
yaml_str = open_file_read(yaml_path).read()
|
||||||
except (FileNotFoundError, OSError) as e:
|
else:
|
||||||
# if inp is a long YAML string, Pathlib will raise OSError: [errno.ENAMETOOLONG]
|
|
||||||
# when trying to expand and resolve it as a path.
|
|
||||||
# Catch this error, but raise any others
|
|
||||||
from errno import ENAMETOOLONG
|
|
||||||
if type(e) is OSError and e.errno != ENAMETOOLONG:
|
|
||||||
raise e
|
|
||||||
# file does not exist; assume inp is a YAML string
|
|
||||||
yaml_str = inp
|
|
||||||
yaml_path = None
|
yaml_path = None
|
||||||
|
yaml_str = inp
|
||||||
yaml_data = yaml.safe_load(yaml_str)
|
yaml_data = yaml.safe_load(yaml_str)
|
||||||
else:
|
else:
|
||||||
# received a Dict, use as-is
|
# received a Dict, use as-is
|
||||||
|
|||||||
@ -1,266 +1,87 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from dataclasses import asdict
|
from collections import namedtuple
|
||||||
from itertools import groupby
|
from dataclasses import dataclass
|
||||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
from enum import Enum, IntEnum
|
||||||
|
from typing import List, Optional, Union
|
||||||
|
|
||||||
from wireviz.DataClasses import AdditionalComponent, Cable, Color, Connector
|
import tabulate as tabulate_module
|
||||||
from wireviz.wv_colors import translate_color
|
|
||||||
from wireviz.wv_gv_html import html_bgcolor_attr, html_line_breaks
|
|
||||||
from wireviz.wv_helper import clean_whitespace
|
|
||||||
|
|
||||||
BOM_COLUMNS_ALWAYS = ("id", "description", "qty", "unit", "designators")
|
from wireviz.wv_utils import html_line_breaks
|
||||||
BOM_COLUMNS_OPTIONAL = ("pn", "manufacturer", "mpn", "supplier", "spn")
|
|
||||||
BOM_COLUMNS_IN_KEY = ("description", "unit") + BOM_COLUMNS_OPTIONAL
|
|
||||||
|
|
||||||
HEADER_PN = "P/N"
|
BOM_HASH_FIELDS = "description qty_unit amount partnumbers"
|
||||||
HEADER_MPN = "MPN"
|
|
||||||
HEADER_SPN = "SPN"
|
|
||||||
|
|
||||||
BOMKey = Tuple[str, ...]
|
|
||||||
BOMColumn = str # = Literal[*BOM_COLUMNS_ALWAYS, *BOM_COLUMNS_OPTIONAL]
|
|
||||||
BOMEntry = Dict[BOMColumn, Union[str, int, float, List[str], None]]
|
|
||||||
|
|
||||||
|
|
||||||
def optional_fields(part: Union[Connector, Cable, AdditionalComponent]) -> BOMEntry:
|
BomEntry = namedtuple("BomEntry", "category qty designators")
|
||||||
"""Return part field values for the optional BOM columns as a dict."""
|
BomHash = namedtuple("BomHash", BOM_HASH_FIELDS)
|
||||||
part = asdict(part)
|
BomHashList = namedtuple("BomHashList", BOM_HASH_FIELDS)
|
||||||
return {field: part.get(field) for field in BOM_COLUMNS_OPTIONAL}
|
PartNumberInfo = namedtuple("PartNumberInfo", "pn manufacturer mpn supplier spn")
|
||||||
|
|
||||||
|
# TODO: different BOM modes
|
||||||
|
# BomMode
|
||||||
|
# "normal" # no bubbles, full PN info in GV node
|
||||||
|
# "bubbles" # = "full" -> maximum info in GV node
|
||||||
|
# "hide PN info"
|
||||||
|
# "PN crossref" = "PN bubbles" + "hide PN info"
|
||||||
|
# "additionally: BOM table in GV graph label (#227)"
|
||||||
|
# "title block in GV graph label"
|
||||||
|
|
||||||
|
|
||||||
def get_additional_component_table(
|
BomCategory = IntEnum( # to enforce ordering in BOM
|
||||||
harness: "Harness", component: Union[Connector, Cable]
|
"BomEntry", "CONNECTOR CABLE WIRE ADDITIONAL_INSIDE ADDITIONAL_OUTSIDE"
|
||||||
|
)
|
||||||
|
QtyMultiplierConnector = Enum(
|
||||||
|
"QtyMultiplierConnector", "PINCOUNT POPULATED CONNECTIONS"
|
||||||
|
)
|
||||||
|
QtyMultiplierCable = Enum(
|
||||||
|
"QtyMultiplierCable", "WIRECOUNT TERMINATION LENGTH TOTAL_LENGTH"
|
||||||
|
)
|
||||||
|
|
||||||
|
PART_NUMBER_HEADERS = PartNumberInfo(
|
||||||
|
pn="P/N", manufacturer=None, mpn="MPN", supplier=None, spn="SPN"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def partnumbers2list(
|
||||||
|
partnumbers: PartNumberInfo, parent_partnumbers: PartNumberInfo = None
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
"""Return a list of diagram node table row strings with additional components."""
|
if parent_partnumbers is None:
|
||||||
rows = []
|
_is_toplevel = True
|
||||||
if component.additional_components:
|
parent_partnumbers = partnumbers
|
||||||
rows.append(["Additional components"])
|
else:
|
||||||
for part in component.additional_components:
|
_is_toplevel = False
|
||||||
common_args = {
|
|
||||||
"qty": part.qty * component.get_qty_multiplier(part.qty_multiplier),
|
# Note: != operator used as XOR in the following section (https://stackoverflow.com/a/433161)
|
||||||
"unit": part.unit,
|
|
||||||
"bgcolor": part.bgcolor,
|
if _is_toplevel != isinstance(parent_partnumbers.pn, List):
|
||||||
}
|
# top level and not a list, or wire level and list
|
||||||
if harness.options.mini_bom_mode:
|
cell_pn = pn_info_string(PART_NUMBER_HEADERS.pn, None, partnumbers.pn)
|
||||||
id = get_bom_index(
|
else:
|
||||||
harness.bom(),
|
# top level and list -> do per wire later
|
||||||
bom_entry_key({**asdict(part), "description": part.description}),
|
# wire level and not list -> already done at top level
|
||||||
)
|
cell_pn = None
|
||||||
rows.append(
|
|
||||||
component_table_entry(
|
if _is_toplevel != isinstance(parent_partnumbers.mpn, List):
|
||||||
f"#{id} ({part.type.rstrip()})", **common_args
|
# TODO: edge case: different manufacturers, but same MPN?
|
||||||
)
|
cell_mpn = pn_info_string(
|
||||||
|
PART_NUMBER_HEADERS.mpn, partnumbers.manufacturer, partnumbers.mpn
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rows.append(
|
cell_mpn = None
|
||||||
component_table_entry(
|
|
||||||
part.description, **common_args, **optional_fields(part)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return rows
|
|
||||||
|
|
||||||
|
if _is_toplevel != isinstance(parent_partnumbers.spn, List):
|
||||||
def get_additional_component_bom(component: Union[Connector, Cable]) -> List[BOMEntry]:
|
# TODO: edge case: different suppliers, but same SPN?
|
||||||
"""Return a list of BOM entries with additional components."""
|
cell_spn = pn_info_string(
|
||||||
bom_entries = []
|
PART_NUMBER_HEADERS.spn, partnumbers.supplier, partnumbers.spn
|
||||||
for part in component.additional_components:
|
|
||||||
bom_entries.append(
|
|
||||||
{
|
|
||||||
"description": part.description,
|
|
||||||
"qty": part.qty * component.get_qty_multiplier(part.qty_multiplier),
|
|
||||||
"unit": part.unit,
|
|
||||||
"designators": component.name if component.show_name else None,
|
|
||||||
**optional_fields(part),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return bom_entries
|
|
||||||
|
|
||||||
|
|
||||||
def bom_entry_key(entry: BOMEntry) -> BOMKey:
|
|
||||||
"""Return a tuple of string values from the dict that must be equal to join BOM entries."""
|
|
||||||
if "key" not in entry:
|
|
||||||
entry["key"] = tuple(
|
|
||||||
clean_whitespace(make_str(entry.get(c))) for c in BOM_COLUMNS_IN_KEY
|
|
||||||
)
|
|
||||||
return entry["key"]
|
|
||||||
|
|
||||||
|
|
||||||
def generate_bom(harness: "Harness") -> List[BOMEntry]:
|
|
||||||
"""Return a list of BOM entries generated from the harness."""
|
|
||||||
from wireviz.Harness import Harness # Local import to avoid circular imports
|
|
||||||
|
|
||||||
bom_entries = []
|
|
||||||
# connectors
|
|
||||||
for connector in harness.connectors.values():
|
|
||||||
if not connector.ignore_in_bom:
|
|
||||||
description = (
|
|
||||||
"Connector"
|
|
||||||
+ (f", {connector.type}" if connector.type else "")
|
|
||||||
+ (f", {connector.subtype}" if connector.subtype else "")
|
|
||||||
+ (f", {connector.pincount} pins" if connector.show_pincount else "")
|
|
||||||
+ (
|
|
||||||
f", {translate_color(connector.color, harness.options.color_mode)}"
|
|
||||||
if connector.color
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
bom_entries.append(
|
|
||||||
{
|
|
||||||
"description": description,
|
|
||||||
"designators": connector.name if connector.show_name else None,
|
|
||||||
**optional_fields(connector),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# add connectors aditional components to bom
|
|
||||||
bom_entries.extend(get_additional_component_bom(connector))
|
|
||||||
|
|
||||||
# cables
|
|
||||||
# TODO: If category can have other non-empty values than 'bundle', maybe it should be part of description?
|
|
||||||
for cable in harness.cables.values():
|
|
||||||
if not cable.ignore_in_bom:
|
|
||||||
if cable.category != "bundle":
|
|
||||||
# process cable as a single entity
|
|
||||||
description = (
|
|
||||||
"Cable"
|
|
||||||
+ (f", {cable.type}" if cable.type else "")
|
|
||||||
+ (f", {cable.wirecount}")
|
|
||||||
+ (
|
|
||||||
f" x {cable.gauge} {cable.gauge_unit}"
|
|
||||||
if cable.gauge
|
|
||||||
else " wires"
|
|
||||||
)
|
|
||||||
+ (" shielded" if cable.shield else "")
|
|
||||||
+ (
|
|
||||||
f", {translate_color(cable.color, harness.options.color_mode)}"
|
|
||||||
if cable.color
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
bom_entries.append(
|
|
||||||
{
|
|
||||||
"description": description,
|
|
||||||
"qty": cable.length,
|
|
||||||
"unit": cable.length_unit,
|
|
||||||
"designators": cable.name if cable.show_name else None,
|
|
||||||
**optional_fields(cable),
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# add each wire from the bundle to the bom
|
cell_spn = None
|
||||||
for index, color in enumerate(cable.colors):
|
|
||||||
description = (
|
|
||||||
"Wire"
|
|
||||||
+ (f", {cable.type}" if cable.type else "")
|
|
||||||
+ (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "")
|
|
||||||
+ (
|
|
||||||
f", {translate_color(color, harness.options.color_mode)}"
|
|
||||||
if color
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
bom_entries.append(
|
|
||||||
{
|
|
||||||
"description": description,
|
|
||||||
"qty": cable.length,
|
|
||||||
"unit": cable.length_unit,
|
|
||||||
"designators": cable.name if cable.show_name else None,
|
|
||||||
**{
|
|
||||||
k: index_if_list(v, index)
|
|
||||||
for k, v in optional_fields(cable).items()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# add cable/bundles aditional components to bom
|
cell_contents = [cell_pn, cell_mpn, cell_spn]
|
||||||
bom_entries.extend(get_additional_component_bom(cable))
|
if any(cell_contents):
|
||||||
|
return [html_line_breaks(cell) for cell in cell_contents]
|
||||||
# add harness aditional components to bom directly, as they both are List[BOMEntry]
|
else:
|
||||||
bom_entries.extend(harness.additional_bom_items)
|
return None
|
||||||
|
|
||||||
# remove line breaks if present and cleanup any resulting whitespace issues
|
|
||||||
bom_entries = [
|
|
||||||
{k: clean_whitespace(v) for k, v in entry.items()} for entry in bom_entries
|
|
||||||
]
|
|
||||||
|
|
||||||
# deduplicate bom
|
|
||||||
bom = []
|
|
||||||
for _, group in groupby(sorted(bom_entries, key=bom_entry_key), key=bom_entry_key):
|
|
||||||
group_entries = list(group)
|
|
||||||
designators = sum(
|
|
||||||
(make_list(entry.get("designators")) for entry in group_entries), []
|
|
||||||
)
|
|
||||||
total_qty = sum(entry.get("qty", 1) for entry in group_entries)
|
|
||||||
bom.append(
|
|
||||||
{
|
|
||||||
**group_entries[0],
|
|
||||||
"qty": round(total_qty, 3),
|
|
||||||
"designators": sorted(set(designators)),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# add an incrementing id to each bom entry
|
|
||||||
return [{**entry, "id": index} for index, entry in enumerate(bom, 1)]
|
|
||||||
|
|
||||||
|
|
||||||
def get_bom_index(bom: List[BOMEntry], target: BOMKey) -> int:
|
|
||||||
"""Return id of BOM entry or raise exception if not found."""
|
|
||||||
for entry in bom:
|
|
||||||
if bom_entry_key(entry) == target:
|
|
||||||
return entry["id"]
|
|
||||||
raise Exception("Internal error: No BOM entry found matching: " + "|".join(target))
|
|
||||||
|
|
||||||
|
|
||||||
def bom_list(bom: List[BOMEntry]) -> List[List[str]]:
|
|
||||||
"""Return list of BOM rows as lists of column strings with headings in top row."""
|
|
||||||
keys = list(BOM_COLUMNS_ALWAYS) # Always include this fixed set of BOM columns.
|
|
||||||
for fieldname in BOM_COLUMNS_OPTIONAL:
|
|
||||||
# Include only those optional BOM columns that are in use.
|
|
||||||
if any(entry.get(fieldname) for entry in bom):
|
|
||||||
keys.append(fieldname)
|
|
||||||
# Custom mapping from internal name to BOM column headers.
|
|
||||||
# Headers not specified here are generated by capitilising the internal name.
|
|
||||||
bom_headings = {
|
|
||||||
"pn": HEADER_PN,
|
|
||||||
"mpn": HEADER_MPN,
|
|
||||||
"spn": HEADER_SPN,
|
|
||||||
}
|
|
||||||
return [
|
|
||||||
[bom_headings.get(k, k.capitalize()) for k in keys]
|
|
||||||
] + [ # Create header row with key names
|
|
||||||
[make_str(entry.get(k)) for k in keys] for entry in bom
|
|
||||||
] # Create string list for each entry row
|
|
||||||
|
|
||||||
|
|
||||||
def component_table_entry(
|
|
||||||
type: str,
|
|
||||||
qty: Union[int, float],
|
|
||||||
unit: Optional[str] = None,
|
|
||||||
bgcolor: Optional[Color] = None,
|
|
||||||
pn: Optional[str] = None,
|
|
||||||
manufacturer: Optional[str] = None,
|
|
||||||
mpn: Optional[str] = None,
|
|
||||||
supplier: Optional[str] = None,
|
|
||||||
spn: Optional[str] = None,
|
|
||||||
) -> str:
|
|
||||||
"""Return a diagram node table row string with an additional component."""
|
|
||||||
part_number_list = [
|
|
||||||
pn_info_string(HEADER_PN, None, pn),
|
|
||||||
pn_info_string(HEADER_MPN, manufacturer, mpn),
|
|
||||||
pn_info_string(HEADER_SPN, supplier, spn),
|
|
||||||
]
|
|
||||||
output = (
|
|
||||||
f"{qty}"
|
|
||||||
+ (f" {unit}" if unit else "")
|
|
||||||
+ f" x {type}"
|
|
||||||
+ ("<br/>" if any(part_number_list) else "")
|
|
||||||
+ (", ".join([pn for pn in part_number_list if pn]))
|
|
||||||
)
|
|
||||||
# format the above output as left aligned text in a single visible cell
|
|
||||||
# indent is set to two to match the indent in the generated html table
|
|
||||||
return f"""<table border="0" cellspacing="0" cellpadding="3" cellborder="1"{html_bgcolor_attr(bgcolor)}><tr>
|
|
||||||
<td align="left" balign="left">{html_line_breaks(output)}</td>
|
|
||||||
</tr></table>"""
|
|
||||||
|
|
||||||
|
|
||||||
def pn_info_string(
|
def pn_info_string(
|
||||||
@ -274,16 +95,51 @@ def pn_info_string(
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def index_if_list(value: Any, index: int) -> Any:
|
def bom_list(bom):
|
||||||
"""Return the value indexed if it is a list, or simply the value otherwise."""
|
headers = (
|
||||||
return value[index] if isinstance(value, list) else value
|
"# Qty Unit Description Amount Unit Designators "
|
||||||
|
"P/N Manufacturer MPN Supplier SPN Category".split(" ")
|
||||||
|
)
|
||||||
|
rows = []
|
||||||
|
rows.append(headers)
|
||||||
|
# fill rows
|
||||||
|
for hash, entry in bom.items():
|
||||||
|
cells = [
|
||||||
|
entry["id"],
|
||||||
|
entry["qty"],
|
||||||
|
hash.qty_unit,
|
||||||
|
hash.description,
|
||||||
|
hash.amount.number if hash.amount else None,
|
||||||
|
hash.amount.unit if hash.amount else None,
|
||||||
|
", ".join(sorted(entry["designators"])),
|
||||||
|
]
|
||||||
|
if hash.partnumbers:
|
||||||
|
cells.extend(
|
||||||
|
[
|
||||||
|
hash.partnumbers.pn,
|
||||||
|
hash.partnumbers.manufacturer,
|
||||||
|
hash.partnumbers.mpn,
|
||||||
|
hash.partnumbers.supplier,
|
||||||
|
hash.partnumbers.spn,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cells.extend([None, None, None, None, None])
|
||||||
|
# cells.extend([f"{entry['category']} ({entry['category'].name})"]) # for debugging
|
||||||
|
rows.append(cells)
|
||||||
|
# remove empty columns
|
||||||
|
transposed = list(map(list, zip(*rows)))
|
||||||
|
transposed = [
|
||||||
|
column
|
||||||
|
for column in transposed
|
||||||
|
if any([cell is not None for cell in column[1:]])
|
||||||
|
# ^ ignore header cell in check
|
||||||
|
]
|
||||||
|
rows = list(map(list, zip(*transposed)))
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
def make_list(value: Any) -> list:
|
def print_bom_table(bom):
|
||||||
"""Return value if a list, empty list if None, or single element list otherwise."""
|
print()
|
||||||
return value if isinstance(value, list) else [] if value is None else [value]
|
print(tabulate_module.tabulate(bom_list(bom), headers="firstrow"))
|
||||||
|
print()
|
||||||
|
|
||||||
def make_str(value: Any) -> str:
|
|
||||||
"""Return comma separated elements if a list, empty string if None, or value as a string otherwise."""
|
|
||||||
return ", ".join(str(element) for element in make_list(value))
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
import wireviz.wireviz as wv
|
import wireviz.wireviz as wv
|
||||||
from wireviz import APP_NAME, __version__
|
from wireviz import APP_NAME, __version__
|
||||||
from wireviz.wv_helper import open_file_read
|
from wireviz.wv_utils import open_file_read
|
||||||
|
|
||||||
format_codes = {
|
format_codes = {
|
||||||
"c": "csv",
|
"c": "csv",
|
||||||
@ -23,9 +23,12 @@ format_codes = {
|
|||||||
"t": "tsv",
|
"t": "tsv",
|
||||||
}
|
}
|
||||||
|
|
||||||
epilog = "The -f or --format option accepts a string containing one or more of the "
|
|
||||||
epilog += "following characters to specify which file types to output:\n"
|
epilog = (
|
||||||
epilog += ", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()])
|
"The -f or --format option accepts a string containing one or more of the "
|
||||||
|
"following characters to specify which file types to output:\n"
|
||||||
|
+ f", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@click.command(epilog=epilog, no_args_is_help=True)
|
@click.command(epilog=epilog, no_args_is_help=True)
|
||||||
@ -58,7 +61,10 @@ epilog += ", ".join([f"{key} ({value.upper()})" for key, value in format_codes.i
|
|||||||
"--output-name",
|
"--output-name",
|
||||||
default=None,
|
default=None,
|
||||||
type=str,
|
type=str,
|
||||||
help="File name (without extension) to use for output files, if different from input file name.",
|
help=(
|
||||||
|
"File name (without extension) to use for output files, "
|
||||||
|
"if different from input file name."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"-V",
|
"-V",
|
||||||
@ -71,7 +77,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
|
|||||||
"""
|
"""
|
||||||
Parses the provided FILE and generates the specified outputs.
|
Parses the provided FILE and generates the specified outputs.
|
||||||
"""
|
"""
|
||||||
print()
|
print() # blank line before execution
|
||||||
print(f"{APP_NAME} {__version__}")
|
print(f"{APP_NAME} {__version__}")
|
||||||
if version:
|
if version:
|
||||||
return # print version number only and exit
|
return # print version number only and exit
|
||||||
@ -105,6 +111,8 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
|
|||||||
prepend_file = Path(prepend_file)
|
prepend_file = Path(prepend_file)
|
||||||
if not prepend_file.exists():
|
if not prepend_file.exists():
|
||||||
raise Exception(f"File does not exist:\n{prepend_file}")
|
raise Exception(f"File does not exist:\n{prepend_file}")
|
||||||
|
if not prepend_file.is_file():
|
||||||
|
raise Exception(f"Path is not a file:\n{prepend_file}")
|
||||||
print("Prepend file:", prepend_file)
|
print("Prepend file:", prepend_file)
|
||||||
|
|
||||||
prepend_input += open_file_read(prepend_file).read() + "\n"
|
prepend_input += open_file_read(prepend_file).read() + "\n"
|
||||||
@ -116,6 +124,8 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
|
|||||||
file = Path(file)
|
file = Path(file)
|
||||||
if not file.exists():
|
if not file.exists():
|
||||||
raise Exception(f"File does not exist:\n{file}")
|
raise Exception(f"File does not exist:\n{file}")
|
||||||
|
if not file.is_file():
|
||||||
|
raise Exception(f"Path is not a file:\n{file}")
|
||||||
|
|
||||||
# file_out = file.with_suffix("") if not output_file else output_file
|
# file_out = file.with_suffix("") if not output_file else output_file
|
||||||
_output_dir = file.parent if not output_dir else output_dir
|
_output_dir = file.parent if not output_dir else output_dir
|
||||||
@ -142,7 +152,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
|
|||||||
image_paths=list(image_paths),
|
image_paths=list(image_paths),
|
||||||
)
|
)
|
||||||
|
|
||||||
print()
|
print() # blank line after execution
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -1,6 +1,205 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from typing import Dict, List
|
from collections import namedtuple
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from enum import Enum
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
padding_amount = 1
|
||||||
|
|
||||||
|
ColorOutputMode = Enum(
|
||||||
|
"ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER"
|
||||||
|
)
|
||||||
|
|
||||||
|
color_output_mode = ColorOutputMode.EN_UPPER
|
||||||
|
|
||||||
|
KnownColor = namedtuple("KnownColor", "html code_de full_en full_de")
|
||||||
|
|
||||||
|
known_colors = { # v--------v--------- for future use
|
||||||
|
"BK": KnownColor("#000000", "sw", "black", "schwarz"),
|
||||||
|
"WH": KnownColor("#ffffff", "ws", "white", "weiß"),
|
||||||
|
"GY": KnownColor("#999999", "gr", "grey", "grau"),
|
||||||
|
"PK": KnownColor("#ff66cc", "rs", "pink", "rosa"),
|
||||||
|
"RD": KnownColor("#ff0000", "rt", "red", "rot"),
|
||||||
|
"OG": KnownColor("#ff8000", "or", "orange", "orange"),
|
||||||
|
"YE": KnownColor("#ffff00", "ge", "yellow", "gelb"),
|
||||||
|
"OL": KnownColor("#708000", "ol", "olive green", "olivgrün"),
|
||||||
|
"GN": KnownColor("#00aa00", "gn", "green", "grün"),
|
||||||
|
"TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"),
|
||||||
|
"LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"),
|
||||||
|
"BU": KnownColor("#0066ff", "bl", "blue", "blau"),
|
||||||
|
"VT": KnownColor("#8000ff", "vi", "violet", "violett"),
|
||||||
|
"BN": KnownColor("#895956", "br", "brown", "braun"),
|
||||||
|
"BG": KnownColor("#ceb673", "bg", "beige", "beige"),
|
||||||
|
"IV": KnownColor("#f5f0d0", "eb", "ivory", "elfenbein"),
|
||||||
|
"SL": KnownColor("#708090", "si", "slate", "schiefer"),
|
||||||
|
"CU": KnownColor("#d6775e", "ku", "copper", "Kupfer"),
|
||||||
|
"SN": KnownColor("#aaaaaa", "vz", "tin", "verzinkt"),
|
||||||
|
"SR": KnownColor("#84878c", "ag", "silver", "Silber"),
|
||||||
|
"GD": KnownColor("#ffcf80", "au", "gold", "Gold"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def convert_case(inp):
|
||||||
|
if "_LOWER" in color_output_mode.name:
|
||||||
|
return inp.lower()
|
||||||
|
elif "_UPPER" in color_output_mode.name:
|
||||||
|
return inp.upper()
|
||||||
|
else: # currently not used
|
||||||
|
return inp
|
||||||
|
|
||||||
|
|
||||||
|
def get_color_by_colorcode_index(color_code: str, index: int) -> str:
|
||||||
|
num_colors_in_code = len(COLOR_CODES[color_code])
|
||||||
|
actual_index = index % num_colors_in_code # wrap around if index is out of bounds
|
||||||
|
return COLOR_CODES[color_code][actual_index]
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SingleColor:
|
||||||
|
_code_en: str
|
||||||
|
_html: str
|
||||||
|
|
||||||
|
@property
|
||||||
|
def code_en(self):
|
||||||
|
return convert_case(self._code_en) if self._code_en else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def code_de(self):
|
||||||
|
return (
|
||||||
|
convert_case(known_colors[self._code_en.upper()].code_de)
|
||||||
|
if self._code_en
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html(self):
|
||||||
|
return convert_case(self._html) if self._code_en else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def known(self):
|
||||||
|
# treat None as a known color
|
||||||
|
return self.code_en.upper() in known_colors.keys() if self._code_en else True
|
||||||
|
|
||||||
|
def __init__(self, inp):
|
||||||
|
if inp is None:
|
||||||
|
self._html = None
|
||||||
|
self._code_en = None
|
||||||
|
elif isinstance(inp, int):
|
||||||
|
hex_str = f"#{inp:06x}"
|
||||||
|
self._html = hex_str
|
||||||
|
self._code_en = hex_str # do not perform reverse lookup - why not?
|
||||||
|
elif not isinstance(inp, str):
|
||||||
|
raise Exception(f"Unknown single color {inp}!")
|
||||||
|
else:
|
||||||
|
inp_upper = inp.upper()
|
||||||
|
if inp_upper in known_colors.keys():
|
||||||
|
self._code_en = inp_upper
|
||||||
|
self._html = known_colors[inp_upper].html
|
||||||
|
else:
|
||||||
|
try: # Maybe inp is an int as string?
|
||||||
|
inp = f"#{int(inp, 0):06x}"
|
||||||
|
except ValueError:
|
||||||
|
pass # assume it's a valid HTML color name
|
||||||
|
self._html = inp
|
||||||
|
self._code_en = inp
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html_padded(self):
|
||||||
|
return ":".join([self.html] * padding_amount)
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
return self._code_en is not None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self._html is None:
|
||||||
|
return ""
|
||||||
|
elif self.known and "EN_" in color_output_mode.name:
|
||||||
|
return self.code_en
|
||||||
|
elif self.known and "DE_" in color_output_mode.name:
|
||||||
|
return self.code_de
|
||||||
|
else:
|
||||||
|
return self.html
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MultiColor:
|
||||||
|
colors: List[SingleColor] = field(default_factory=list)
|
||||||
|
|
||||||
|
def __init__(self, inp):
|
||||||
|
self.colors = []
|
||||||
|
if inp is None:
|
||||||
|
pass
|
||||||
|
elif isinstance(inp, List): # input is already a list
|
||||||
|
for item in inp:
|
||||||
|
if item is None:
|
||||||
|
pass
|
||||||
|
elif isinstance(item, SingleColor):
|
||||||
|
self.colors.append(item)
|
||||||
|
else: # string or integer (type check done inside)
|
||||||
|
self.colors.append(SingleColor(item))
|
||||||
|
elif isinstance(inp, SingleColor): # single color
|
||||||
|
self.colors = [inp]
|
||||||
|
elif isinstance(inp, int):
|
||||||
|
self.colors = [SingleColor(inp)]
|
||||||
|
elif not isinstance(inp, str):
|
||||||
|
raise Exception(f"Unknown multi-color {inp}!")
|
||||||
|
elif ":" in inp: # split input into list
|
||||||
|
self.colors = [SingleColor(item) for item in inp.split(":")]
|
||||||
|
else:
|
||||||
|
if len(inp) % 2 == 0:
|
||||||
|
items = [inp[i : i + 2] for i in range(0, len(inp), 2)]
|
||||||
|
known = [item.upper() in known_colors.keys() for item in items]
|
||||||
|
if all(known):
|
||||||
|
self.colors = [SingleColor(item) for item in items]
|
||||||
|
return
|
||||||
|
# assume it's a valid HTML color name
|
||||||
|
self.colors = [SingleColor(inp)]
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.colors)
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
return len(self.colors) >= 1
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if "EN_" in color_output_mode.name or "DE_" in color_output_mode.name:
|
||||||
|
joiner = "" if self.all_known else ":"
|
||||||
|
elif "HTML_" in color_output_mode.name:
|
||||||
|
joiner = ":"
|
||||||
|
else:
|
||||||
|
joiner = "???"
|
||||||
|
return joiner.join([str(color) for color in self.colors])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def all_known(self):
|
||||||
|
return all([color.known for color in self.colors])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html(self):
|
||||||
|
return ":".join([color.html for color in self.colors])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html_padded_list(self):
|
||||||
|
# padding only properly works for padding_amount 1 or 3
|
||||||
|
if padding_amount == 1:
|
||||||
|
out = [color.html for color in self.colors]
|
||||||
|
elif len(self) == 0:
|
||||||
|
out = []
|
||||||
|
elif len(self) == 1:
|
||||||
|
out = [self.colors[0].html for i in range(3)]
|
||||||
|
elif len(self) == 2:
|
||||||
|
out = [self.colors[0].html, self.colors[1].html, self.colors[0].html]
|
||||||
|
elif len(self) == 3:
|
||||||
|
out = [color.html for color in self.colors]
|
||||||
|
else:
|
||||||
|
raise Exception(f"Padding not supported for len {len(self)}")
|
||||||
|
return [str(color) for color in out]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html_padded(self):
|
||||||
|
return ":".join(self.html_padded_list)
|
||||||
|
|
||||||
|
|
||||||
COLOR_CODES = {
|
COLOR_CODES = {
|
||||||
# fmt: off
|
# fmt: off
|
||||||
@ -38,164 +237,3 @@ COLOR_CODES = {
|
|||||||
"T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"],
|
"T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"],
|
||||||
"T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"],
|
"T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"],
|
||||||
}
|
}
|
||||||
|
|
||||||
# Convention: Color names should be 2 letters long, to allow for multicolored wires
|
|
||||||
|
|
||||||
_color_hex = {
|
|
||||||
"BK": "#000000",
|
|
||||||
"WH": "#ffffff",
|
|
||||||
"GY": "#999999",
|
|
||||||
"PK": "#ff66cc",
|
|
||||||
"RD": "#ff0000",
|
|
||||||
"OG": "#ff8000",
|
|
||||||
"YE": "#ffff00",
|
|
||||||
"OL": "#708000", # olive green
|
|
||||||
"GN": "#00ff00",
|
|
||||||
"TQ": "#00ffff",
|
|
||||||
"LB": "#a0dfff", # light blue
|
|
||||||
"BU": "#0066ff",
|
|
||||||
"VT": "#8000ff",
|
|
||||||
"BN": "#895956",
|
|
||||||
"BG": "#ceb673", # beige
|
|
||||||
"IV": "#f5f0d0", # ivory
|
|
||||||
"SL": "#708090",
|
|
||||||
"CU": "#d6775e", # Faux-copper look, for bare CU wire
|
|
||||||
"SN": "#aaaaaa", # Silvery look for tinned bare wire
|
|
||||||
"SR": "#84878c", # Darker silver for silvered wire
|
|
||||||
"GD": "#ffcf80", # Golden color for gold
|
|
||||||
}
|
|
||||||
|
|
||||||
_color_full = {
|
|
||||||
"BK": "black",
|
|
||||||
"WH": "white",
|
|
||||||
"GY": "grey",
|
|
||||||
"PK": "pink",
|
|
||||||
"RD": "red",
|
|
||||||
"OG": "orange",
|
|
||||||
"YE": "yellow",
|
|
||||||
"OL": "olive green",
|
|
||||||
"GN": "green",
|
|
||||||
"TQ": "turquoise",
|
|
||||||
"LB": "light blue",
|
|
||||||
"BU": "blue",
|
|
||||||
"VT": "violet",
|
|
||||||
"BN": "brown",
|
|
||||||
"BG": "beige",
|
|
||||||
"IV": "ivory",
|
|
||||||
"SL": "slate",
|
|
||||||
"CU": "copper",
|
|
||||||
"SN": "tin",
|
|
||||||
"SR": "silver",
|
|
||||||
"GD": "gold",
|
|
||||||
}
|
|
||||||
|
|
||||||
_color_ger = {
|
|
||||||
"BK": "sw",
|
|
||||||
"WH": "ws",
|
|
||||||
"GY": "gr",
|
|
||||||
"PK": "rs",
|
|
||||||
"RD": "rt",
|
|
||||||
"OG": "or",
|
|
||||||
"YE": "ge",
|
|
||||||
"OL": "ol", # olivgrün
|
|
||||||
"GN": "gn",
|
|
||||||
"TQ": "tk",
|
|
||||||
"LB": "hb", # hellblau
|
|
||||||
"BU": "bl",
|
|
||||||
"VT": "vi",
|
|
||||||
"BN": "br",
|
|
||||||
"BG": "bg", # beige
|
|
||||||
"IV": "eb", # elfenbeinfarben
|
|
||||||
"SL": "si", # Schiefer
|
|
||||||
"CU": "ku", # Kupfer
|
|
||||||
"SN": "vz", # verzinkt
|
|
||||||
"SR": "ag", # Silber
|
|
||||||
"GD": "au", # Gold
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
color_default = "#ffffff"
|
|
||||||
|
|
||||||
_hex_digits = set("0123456789abcdefABCDEF")
|
|
||||||
|
|
||||||
|
|
||||||
# Literal type aliases below are commented to avoid requiring python 3.8
|
|
||||||
Color = str # Two-letter color name = Literal[_color_hex.keys()]
|
|
||||||
Colors = str # One or more two-letter color names (Color) concatenated into one string
|
|
||||||
ColorMode = (
|
|
||||||
str # = Literal['full', 'FULL', 'hex', 'HEX', 'short', 'SHORT', 'ger', 'GER']
|
|
||||||
)
|
|
||||||
ColorScheme = str # Color scheme name = Literal[COLOR_CODES.keys()]
|
|
||||||
|
|
||||||
|
|
||||||
def get_color_hex(input: Colors, pad: bool = False) -> List[str]:
|
|
||||||
"""Return list of hex colors from either a string of color names or :-separated hex colors."""
|
|
||||||
if input is None or input == "":
|
|
||||||
return [color_default]
|
|
||||||
elif input[0] == "#": # Hex color(s)
|
|
||||||
output = input.split(":")
|
|
||||||
for i, c in enumerate(output):
|
|
||||||
if c[0] != "#" or not all(d in _hex_digits for d in c[1:]):
|
|
||||||
if c != input:
|
|
||||||
c += f" in input: {input}"
|
|
||||||
print(f"Invalid hex color: {c}")
|
|
||||||
output[i] = color_default
|
|
||||||
else: # Color name(s)
|
|
||||||
|
|
||||||
def lookup(c: str) -> str:
|
|
||||||
try:
|
|
||||||
return _color_hex[c]
|
|
||||||
except KeyError:
|
|
||||||
if c != input:
|
|
||||||
c += f" in input: {input}"
|
|
||||||
print(f"Unknown color name: {c}")
|
|
||||||
return color_default
|
|
||||||
|
|
||||||
output = [lookup(input[i : i + 2]) for i in range(0, len(input), 2)]
|
|
||||||
|
|
||||||
if len(output) == 2: # Give wires with EXACTLY 2 colors that striped look.
|
|
||||||
output += output[:1]
|
|
||||||
elif pad and len(output) == 1: # Hacky style fix: Give single color wires
|
|
||||||
output *= 3 # a triple-up so that wires are the same size.
|
|
||||||
|
|
||||||
return output
|
|
||||||
|
|
||||||
|
|
||||||
def get_color_translation(translate: Dict[Color, str], input: Colors) -> List[str]:
|
|
||||||
"""Return list of colors translations from either a string of color names or :-separated hex colors."""
|
|
||||||
|
|
||||||
def from_hex(hex_input: str) -> str:
|
|
||||||
for color, hex in _color_hex.items():
|
|
||||||
if hex == hex_input:
|
|
||||||
return translate[color]
|
|
||||||
return f'({",".join(str(int(hex_input[i:i+2], 16)) for i in range(1, 6, 2))})'
|
|
||||||
|
|
||||||
return (
|
|
||||||
[from_hex(h) for h in input.lower().split(":")]
|
|
||||||
if input[0] == "#"
|
|
||||||
else [translate.get(input[i : i + 2], "??") for i in range(0, len(input), 2)]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def translate_color(input: Colors, color_mode: ColorMode) -> str:
|
|
||||||
if input == "" or input is None:
|
|
||||||
return ""
|
|
||||||
upper = color_mode.isupper()
|
|
||||||
if not (color_mode.isupper() or color_mode.islower()):
|
|
||||||
raise Exception("Unknown color mode capitalization")
|
|
||||||
|
|
||||||
color_mode = color_mode.lower()
|
|
||||||
if color_mode == "full":
|
|
||||||
output = "/".join(get_color_translation(_color_full, input))
|
|
||||||
elif color_mode == "hex":
|
|
||||||
output = ":".join(get_color_hex(input, pad=False))
|
|
||||||
elif color_mode == "ger":
|
|
||||||
output = "".join(get_color_translation(_color_ger, input))
|
|
||||||
elif color_mode == "short":
|
|
||||||
output = input
|
|
||||||
else:
|
|
||||||
raise Exception("Unknown color mode")
|
|
||||||
if upper:
|
|
||||||
return output.upper()
|
|
||||||
else:
|
|
||||||
return output.lower()
|
|
||||||
|
|||||||
826
src/wireviz/wv_dataclasses.py
Normal file
@ -0,0 +1,826 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from collections import namedtuple
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from enum import Enum
|
||||||
|
from itertools import zip_longest
|
||||||
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
|
from wireviz.wv_bom import (
|
||||||
|
BomHash,
|
||||||
|
BomHashList,
|
||||||
|
PartNumberInfo,
|
||||||
|
QtyMultiplierCable,
|
||||||
|
QtyMultiplierConnector,
|
||||||
|
)
|
||||||
|
from wireviz.wv_colors import (
|
||||||
|
COLOR_CODES,
|
||||||
|
ColorOutputMode,
|
||||||
|
MultiColor,
|
||||||
|
SingleColor,
|
||||||
|
get_color_by_colorcode_index,
|
||||||
|
)
|
||||||
|
from wireviz.wv_utils import (
|
||||||
|
NumberAndUnit,
|
||||||
|
awg_equiv,
|
||||||
|
aspect_ratio,
|
||||||
|
mm2_equiv,
|
||||||
|
parse_number_and_unit,
|
||||||
|
remove_links,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Each type alias have their legal values described in comments
|
||||||
|
# - validation might be implemented in the future
|
||||||
|
PlainText = str # Text not containing HTML tags nor newlines
|
||||||
|
Hypertext = str # Text possibly including HTML hyperlinks that are removed in all outputs except HTML output
|
||||||
|
MultilineHypertext = (
|
||||||
|
str # Hypertext possibly also including newlines to break lines in diagram output
|
||||||
|
)
|
||||||
|
|
||||||
|
Designator = PlainText # Case insensitive unique name of connector or cable
|
||||||
|
|
||||||
|
# Literal type aliases below are commented to avoid requiring python 3.8
|
||||||
|
ImageScale = PlainText # = Literal['false', 'true', 'width', 'height', 'both']
|
||||||
|
|
||||||
|
# Type combinations
|
||||||
|
Pin = Union[int, PlainText] # Pin identifier
|
||||||
|
PinIndex = int # Zero-based pin index
|
||||||
|
Wire = Union[int, PlainText] # Wire number or Literal['s'] for shield
|
||||||
|
NoneOrMorePins = Union[
|
||||||
|
Pin, Tuple[Pin, ...], None
|
||||||
|
] # None, one, or a tuple of pin identifiers
|
||||||
|
NoneOrMorePinIndices = Union[
|
||||||
|
PinIndex, Tuple[PinIndex, ...], None
|
||||||
|
] # None, one, or a tuple of zero-based pin indices
|
||||||
|
OneOrMoreWires = Union[Wire, Tuple[Wire, ...]] # One or a tuple of wires
|
||||||
|
|
||||||
|
# Metadata can contain whatever is needed by the HTML generation/template.
|
||||||
|
MetadataKeys = PlainText # Literal['title', 'description', 'notes', ...]
|
||||||
|
|
||||||
|
|
||||||
|
Side = Enum("Side", "LEFT RIGHT")
|
||||||
|
ArrowDirection = Enum("ArrowDirection", "NONE BACK FORWARD BOTH")
|
||||||
|
ArrowWeight = Enum("ArrowWeight", "SINGLE DOUBLE")
|
||||||
|
|
||||||
|
AUTOGENERATED_PREFIX = "AUTOGENERATED_"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Arrow:
|
||||||
|
direction: ArrowDirection
|
||||||
|
weight: ArrowWeight
|
||||||
|
|
||||||
|
|
||||||
|
class Metadata(dict):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Options:
|
||||||
|
fontname: PlainText = "arial"
|
||||||
|
bgcolor: SingleColor = "WH" # will be converted to SingleColor in __post_init__
|
||||||
|
bgcolor_node: SingleColor = "WH"
|
||||||
|
bgcolor_connector: SingleColor = None
|
||||||
|
bgcolor_cable: SingleColor = None
|
||||||
|
bgcolor_bundle: SingleColor = None
|
||||||
|
color_output_mode: ColorOutputMode = ColorOutputMode.EN_UPPER
|
||||||
|
mini_bom_mode: bool = True
|
||||||
|
template_separator: str = "."
|
||||||
|
_pad: int = 0
|
||||||
|
# TODO: resolve template and image paths during rendering, not during YAML parsing
|
||||||
|
_template_paths: List = field(default_factory=list)
|
||||||
|
_image_paths: List = field(default_factory=list)
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
self.bgcolor = SingleColor(self.bgcolor)
|
||||||
|
self.bgcolor_node = SingleColor(self.bgcolor_node)
|
||||||
|
self.bgcolor_connector = SingleColor(self.bgcolor_connector)
|
||||||
|
self.bgcolor_cable = SingleColor(self.bgcolor_cable)
|
||||||
|
self.bgcolor_bundle = SingleColor(self.bgcolor_bundle)
|
||||||
|
|
||||||
|
if not self.bgcolor_node:
|
||||||
|
self.bgcolor_node = self.bgcolor
|
||||||
|
if not self.bgcolor_connector:
|
||||||
|
self.bgcolor_connector = self.bgcolor_node
|
||||||
|
if not self.bgcolor_cable:
|
||||||
|
self.bgcolor_cable = self.bgcolor_node
|
||||||
|
if not self.bgcolor_bundle:
|
||||||
|
self.bgcolor_bundle = self.bgcolor_cable
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Tweak:
|
||||||
|
override: Optional[Dict[Designator, Dict[str, Optional[str]]]] = None
|
||||||
|
append: Union[str, List[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Image:
|
||||||
|
# Attributes of the image object <img>:
|
||||||
|
src: str
|
||||||
|
scale: Optional[ImageScale] = None
|
||||||
|
# Attributes of the image cell <td> containing the image:
|
||||||
|
width: Optional[int] = None
|
||||||
|
height: Optional[int] = None
|
||||||
|
fixedsize: Optional[bool] = None
|
||||||
|
bgcolor: SingleColor = None
|
||||||
|
# Contents of the text cell <td> just below the image cell:
|
||||||
|
caption: Optional[MultilineHypertext] = None
|
||||||
|
# See also HTML doc at https://graphviz.org/doc/info/shapes.html#html
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
self.bgcolor = SingleColor(self.bgcolor)
|
||||||
|
|
||||||
|
if self.fixedsize is None:
|
||||||
|
# Default True if any dimension specified unless self.scale also is specified.
|
||||||
|
self.fixedsize = (self.width or self.height) and self.scale is None
|
||||||
|
|
||||||
|
if self.scale is None:
|
||||||
|
if not self.width and not self.height:
|
||||||
|
self.scale = "false"
|
||||||
|
elif self.width and self.height:
|
||||||
|
self.scale = "both"
|
||||||
|
else:
|
||||||
|
self.scale = "true" # When only one dimension is specified.
|
||||||
|
|
||||||
|
if self.fixedsize:
|
||||||
|
# If only one dimension is specified, compute the other
|
||||||
|
# because Graphviz requires both when fixedsize=True.
|
||||||
|
if self.height:
|
||||||
|
if not self.width:
|
||||||
|
self.width = self.height * aspect_ratio(self.src)
|
||||||
|
else:
|
||||||
|
if self.width:
|
||||||
|
self.height = self.width / aspect_ratio(self.src)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class PinClass:
|
||||||
|
index: int
|
||||||
|
id: str
|
||||||
|
label: str
|
||||||
|
color: MultiColor
|
||||||
|
parent: str # designator of parent connector
|
||||||
|
_num_connections = 0 # incremented in Connector.connect()
|
||||||
|
_anonymous: bool = False # true for pins on autogenerated connectors
|
||||||
|
_simple: bool = False # true for simple connector
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
snippets = [ # use str() for each in case they are int or other non-str
|
||||||
|
str(self.parent) if not self._anonymous else "",
|
||||||
|
str(self.id) if not self._anonymous and not self._simple else "",
|
||||||
|
str(self.label) if self.label else "",
|
||||||
|
]
|
||||||
|
return ":".join([snip for snip in snippets if snip != ""])
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Component:
|
||||||
|
category: Optional[str] = None # currently only used by cables, to define bundles
|
||||||
|
type: Union[MultilineHypertext, List[MultilineHypertext]] = None
|
||||||
|
subtype: Union[MultilineHypertext, List[MultilineHypertext]] = None
|
||||||
|
|
||||||
|
# part number
|
||||||
|
partnumbers: PartNumberInfo = None # filled by __post_init__()
|
||||||
|
# the following are provided for user convenience and should not be accessed later.
|
||||||
|
# their contents are loaded into partnumbers during the child class __post_init__()
|
||||||
|
pn: str = None
|
||||||
|
manufacturer: str = None
|
||||||
|
mpn: str = None
|
||||||
|
supplier: str = None
|
||||||
|
spn: str = None
|
||||||
|
# BOM info
|
||||||
|
qty: Optional[Union[None, int, float]] = None
|
||||||
|
amount: Optional[NumberAndUnit] = None
|
||||||
|
sum_amounts_in_bom: bool = True
|
||||||
|
ignore_in_bom: bool = False
|
||||||
|
bom_id: Optional[str] = None # to be filled after harness is built
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
partnos = [self.pn, self.manufacturer, self.mpn, self.supplier, self.spn]
|
||||||
|
partnos = [remove_links(entry) for entry in partnos]
|
||||||
|
partnos = tuple(partnos)
|
||||||
|
self.partnumbers = PartNumberInfo(*partnos)
|
||||||
|
self.amount = parse_number_and_unit(self.amount, None)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bom_hash(self) -> BomHash:
|
||||||
|
if isinstance(self, AdditionalComponent):
|
||||||
|
_amount = self.amount_computed
|
||||||
|
else:
|
||||||
|
_amount = self.amount
|
||||||
|
|
||||||
|
if self.sum_amounts_in_bom:
|
||||||
|
_hash = BomHash(
|
||||||
|
description=self.description,
|
||||||
|
qty_unit=_amount.unit if _amount else None,
|
||||||
|
amount=None,
|
||||||
|
partnumbers=self.partnumbers,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
_hash = BomHash(
|
||||||
|
description=self.description,
|
||||||
|
qty_unit=None,
|
||||||
|
amount=_amount,
|
||||||
|
partnumbers=self.partnumbers,
|
||||||
|
)
|
||||||
|
return _hash
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_pn_info(self) -> bool:
|
||||||
|
return any([self.pn, self.manufacturer, self.mpn, self.supplier, self.spn])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
return f"{self.type}{', ' + self.subtype if self.subtype else ''}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class AdditionalBomItem(Component):
|
||||||
|
designators: Optional[str] = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def additional_components(self):
|
||||||
|
# An additional item may not have further nested additional comonents.
|
||||||
|
# This property is currently needed for objects in the same list as
|
||||||
|
# TopLevelGraphicalComponent objects in a Harness method.
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class GraphicalComponent(Component): # abstract class
|
||||||
|
bgcolor: Optional[SingleColor] = None
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
super().__post_init__()
|
||||||
|
self.bgcolor = SingleColor(self.bgcolor)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class AdditionalComponent(GraphicalComponent):
|
||||||
|
qty_multiplier: Union[QtyMultiplierConnector, QtyMultiplierCable, int] = 1
|
||||||
|
qty_computed: Optional[int] = None
|
||||||
|
explicit_qty: bool = True
|
||||||
|
amount_computed: Optional[NumberAndUnit] = None
|
||||||
|
note: str = None
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
super().__post_init__()
|
||||||
|
|
||||||
|
if isinstance(self.qty_multiplier, float) or isinstance(
|
||||||
|
self.qty_multiplier, int
|
||||||
|
):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.qty_multiplier = self.qty_multiplier.upper()
|
||||||
|
if self.qty_multiplier in QtyMultiplierConnector.__members__.keys():
|
||||||
|
self.qty_multiplier = QtyMultiplierConnector[self.qty_multiplier]
|
||||||
|
elif self.qty_multiplier in QtyMultiplierCable.__members__.keys():
|
||||||
|
self.qty_multiplier = QtyMultiplierCable[self.qty_multiplier]
|
||||||
|
else:
|
||||||
|
raise Exception(f"Unknown qty multiplier: {self.qty_multiplier}")
|
||||||
|
|
||||||
|
if self.qty is None and self.qty_multiplier in [
|
||||||
|
QtyMultiplierCable.TOTAL_LENGTH,
|
||||||
|
QtyMultiplierCable.LENGTH,
|
||||||
|
1,
|
||||||
|
]: # simplify add.comp. table in parent node for implicit qty 1
|
||||||
|
self.qty = 1
|
||||||
|
self.explicit_qty = False
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TopLevelGraphicalComponent(GraphicalComponent): # abstract class
|
||||||
|
# component properties
|
||||||
|
designator: Designator = None
|
||||||
|
color: Optional[MultiColor] = None
|
||||||
|
image: Optional[Image] = None
|
||||||
|
additional_parameters: Optional[Dict] = None
|
||||||
|
additional_components: List[AdditionalComponent] = field(default_factory=list)
|
||||||
|
notes: Optional[MultilineHypertext] = None
|
||||||
|
# rendering options
|
||||||
|
bgcolor_title: Optional[SingleColor] = None
|
||||||
|
show_name: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Connector(TopLevelGraphicalComponent):
|
||||||
|
# connector-specific properties
|
||||||
|
style: Optional[str] = None
|
||||||
|
loops: List[List[Pin]] = field(default_factory=list)
|
||||||
|
# pin information in particular
|
||||||
|
pincount: Optional[int] = None
|
||||||
|
pins: List[Pin] = field(default_factory=list) # legacy
|
||||||
|
pinlabels: List[Pin] = field(default_factory=list) # legacy
|
||||||
|
pincolors: List[str] = field(default_factory=list) # legacy
|
||||||
|
pin_objects: Dict[Any, PinClass] = field(default_factory=dict) # new
|
||||||
|
# rendering option
|
||||||
|
show_pincount: Optional[bool] = None
|
||||||
|
hide_disconnected_pins: bool = False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_autogenerated(self):
|
||||||
|
return self.designator.startswith(AUTOGENERATED_PREFIX)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
substrs = [
|
||||||
|
"Connector",
|
||||||
|
self.type,
|
||||||
|
self.subtype,
|
||||||
|
f"{self.pincount} pins" if self.show_pincount else None,
|
||||||
|
str(self.color) if self.color else None,
|
||||||
|
]
|
||||||
|
return ", ".join([str(s) for s in substrs if s is not None and s != ""])
|
||||||
|
|
||||||
|
def should_show_pin(self, pin_id):
|
||||||
|
return (
|
||||||
|
not self.hide_disconnected_pins
|
||||||
|
or self.pin_objects[pin_id]._num_connections > 0
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unit(self): # for compatibility with BOM hashing
|
||||||
|
return None # connectors do not support units.
|
||||||
|
|
||||||
|
def __post_init__(self) -> None:
|
||||||
|
super().__post_init__()
|
||||||
|
|
||||||
|
self.bgcolor_title = SingleColor(self.bgcolor_title)
|
||||||
|
self.color = MultiColor(self.color)
|
||||||
|
|
||||||
|
# connectors do not support custom qty or amount
|
||||||
|
if self.qty is None:
|
||||||
|
self.qty = 1
|
||||||
|
if self.qty != 1:
|
||||||
|
raise Exception("Connector qty != 1 not supported")
|
||||||
|
if self.amount is not None:
|
||||||
|
raise Exception("Connector amount not supported")
|
||||||
|
|
||||||
|
if isinstance(self.image, dict):
|
||||||
|
self.image = Image(**self.image)
|
||||||
|
|
||||||
|
self.ports_left = False
|
||||||
|
self.ports_right = False
|
||||||
|
self.visible_pins = {}
|
||||||
|
|
||||||
|
if self.style == "simple":
|
||||||
|
if self.pincount and self.pincount > 1:
|
||||||
|
raise Exception(
|
||||||
|
"Connectors with style set to simple may only have one pin"
|
||||||
|
)
|
||||||
|
self.pincount = 1
|
||||||
|
|
||||||
|
if not self.pincount:
|
||||||
|
self.pincount = max(
|
||||||
|
len(self.pins), len(self.pinlabels), len(self.pincolors)
|
||||||
|
)
|
||||||
|
if not self.pincount:
|
||||||
|
raise Exception(
|
||||||
|
"You need to specify at least one: "
|
||||||
|
"pincount, pins, pinlabels, or pincolors"
|
||||||
|
)
|
||||||
|
|
||||||
|
# create default list for pins (sequential) if not specified
|
||||||
|
if not self.pins:
|
||||||
|
self.pins = list(range(1, self.pincount + 1))
|
||||||
|
|
||||||
|
if len(self.pins) != len(set(self.pins)):
|
||||||
|
raise Exception("Pins are not unique")
|
||||||
|
|
||||||
|
# all checks have passed
|
||||||
|
pin_tuples = zip_longest(
|
||||||
|
self.pins,
|
||||||
|
self.pinlabels,
|
||||||
|
self.pincolors,
|
||||||
|
)
|
||||||
|
for pin_index, (pin_id, pin_label, pin_color) in enumerate(pin_tuples):
|
||||||
|
self.pin_objects[pin_id] = PinClass(
|
||||||
|
index=pin_index,
|
||||||
|
id=pin_id,
|
||||||
|
label=pin_label,
|
||||||
|
color=MultiColor(pin_color),
|
||||||
|
parent=self.designator,
|
||||||
|
_anonymous=self.is_autogenerated,
|
||||||
|
_simple=self.style == "simple",
|
||||||
|
)
|
||||||
|
|
||||||
|
if self.show_name is None:
|
||||||
|
self.show_name = self.style != "simple" and not self.is_autogenerated
|
||||||
|
|
||||||
|
if self.show_pincount is None:
|
||||||
|
# hide pincount for simple (1 pin) connectors by default
|
||||||
|
self.show_pincount = self.style != "simple"
|
||||||
|
|
||||||
|
for loop in self.loops:
|
||||||
|
# TODO: allow using pin labels in addition to pin numbers,
|
||||||
|
# just like when defining regular connections
|
||||||
|
# TODO: include properties of wire used to create the loop
|
||||||
|
if len(loop) != 2:
|
||||||
|
raise Exception("Loops must be between exactly two pins!")
|
||||||
|
for pin in loop:
|
||||||
|
if pin not in self.pins:
|
||||||
|
raise Exception(
|
||||||
|
f'Unknown loop pin "{pin}" for connector "{self.name}"!'
|
||||||
|
)
|
||||||
|
# Make sure loop connected pins are not hidden.
|
||||||
|
# side=None, determine side to show loops during rendering
|
||||||
|
self.activate_pin(pin, side=None, is_connection=True)
|
||||||
|
|
||||||
|
for i, item in enumerate(self.additional_components):
|
||||||
|
if isinstance(item, dict):
|
||||||
|
self.additional_components[i] = AdditionalComponent(**item)
|
||||||
|
|
||||||
|
def activate_pin(self, pin_id, side: Side = None, is_connection=True) -> None:
|
||||||
|
if is_connection:
|
||||||
|
self.pin_objects[pin_id]._num_connections += 1
|
||||||
|
if side == Side.LEFT:
|
||||||
|
self.ports_left = True
|
||||||
|
elif side == Side.RIGHT:
|
||||||
|
self.ports_right = True
|
||||||
|
|
||||||
|
def compute_qty_multipliers(self):
|
||||||
|
# do not run before all connections in harness have been made!
|
||||||
|
num_populated_pins = len(
|
||||||
|
[pin for pin in self.pin_objects.values() if pin._num_connections > 0]
|
||||||
|
)
|
||||||
|
num_connections = sum(
|
||||||
|
[pin._num_connections for pin in self.pin_objects.values()]
|
||||||
|
)
|
||||||
|
qty_multipliers_computed = {
|
||||||
|
"PINCOUNT": self.pincount,
|
||||||
|
"POPULATED": num_populated_pins,
|
||||||
|
"CONNECTIONS": num_connections,
|
||||||
|
}
|
||||||
|
for subitem in self.additional_components:
|
||||||
|
if isinstance(subitem.qty_multiplier, QtyMultiplierConnector):
|
||||||
|
computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name]
|
||||||
|
elif isinstance(subitem.qty_multiplier, QtyMultiplierCable):
|
||||||
|
raise Exception("Used a cable multiplier in a connector!")
|
||||||
|
else: # int or float
|
||||||
|
computed_factor = subitem.qty_multiplier
|
||||||
|
|
||||||
|
if subitem.qty is not None:
|
||||||
|
subitem.qty_computed = subitem.qty * computed_factor
|
||||||
|
else:
|
||||||
|
subitem.qty_computed = computed_factor
|
||||||
|
subitem.amount_computed = subitem.amount
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class WireClass:
|
||||||
|
parent: str # designator of parent cable/bundle
|
||||||
|
# wire-specific properties
|
||||||
|
index: int
|
||||||
|
id: str
|
||||||
|
label: str
|
||||||
|
color: MultiColor
|
||||||
|
# ...
|
||||||
|
bom_id: Optional[str] = None # to be filled after harness is built
|
||||||
|
# inheritable from parent cable
|
||||||
|
type: Union[MultilineHypertext, List[MultilineHypertext]] = None
|
||||||
|
subtype: Union[MultilineHypertext, List[MultilineHypertext]] = None
|
||||||
|
gauge: Optional[NumberAndUnit] = None
|
||||||
|
length: Optional[NumberAndUnit] = None
|
||||||
|
ignore_in_bom: Optional[bool] = False
|
||||||
|
sum_amounts_in_bom: bool = True
|
||||||
|
partnumbers: PartNumberInfo = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bom_hash(self) -> BomHash:
|
||||||
|
if self.sum_amounts_in_bom:
|
||||||
|
_hash = BomHash(
|
||||||
|
description=self.description,
|
||||||
|
qty_unit=self.length.unit if self.length else None,
|
||||||
|
amount=None,
|
||||||
|
partnumbers=self.partnumbers,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
_hash = BomHash(
|
||||||
|
description=self.description,
|
||||||
|
qty_unit=None,
|
||||||
|
amount=self.length,
|
||||||
|
partnumbers=self.partnumbers,
|
||||||
|
)
|
||||||
|
return _hash
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gauge_str(self):
|
||||||
|
if not self.gauge:
|
||||||
|
return None
|
||||||
|
actual_gauge = f"{self.gauge.number} {self.gauge.unit}"
|
||||||
|
actual_gauge = actual_gauge.replace("mm2", "mm\u00B2")
|
||||||
|
return actual_gauge
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
substrs = [
|
||||||
|
"Wire",
|
||||||
|
self.type,
|
||||||
|
self.subtype,
|
||||||
|
self.gauge_str,
|
||||||
|
str(self.color) if self.color else None,
|
||||||
|
]
|
||||||
|
desc = ", ".join([s for s in substrs if s is not None and s != ""])
|
||||||
|
return desc
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ShieldClass(WireClass):
|
||||||
|
pass # TODO, for wires with multiple shields more shield details, ...
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Connection:
|
||||||
|
from_: PinClass = None
|
||||||
|
via: Union[WireClass, ShieldClass] = None
|
||||||
|
to: PinClass = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Cable(TopLevelGraphicalComponent):
|
||||||
|
# cable-specific properties
|
||||||
|
gauge: Optional[NumberAndUnit] = None
|
||||||
|
length: Optional[NumberAndUnit] = None
|
||||||
|
color_code: Optional[str] = None
|
||||||
|
# wire information in particular
|
||||||
|
wirecount: Optional[int] = None
|
||||||
|
shield: Union[bool, MultiColor] = False
|
||||||
|
colors: List[str] = field(default_factory=list) # legacy
|
||||||
|
wirelabels: List[Wire] = field(default_factory=list) # legacy
|
||||||
|
wire_objects: Dict[Any, WireClass] = field(default_factory=dict) # new
|
||||||
|
# internal
|
||||||
|
_connections: List[Connection] = field(default_factory=list)
|
||||||
|
# rendering options
|
||||||
|
show_name: Optional[bool] = None
|
||||||
|
show_equiv: bool = False
|
||||||
|
show_wirecount: bool = True
|
||||||
|
show_wirenumbers: Optional[bool] = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_autogenerated(self):
|
||||||
|
return self.designator.startswith(AUTOGENERATED_PREFIX)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unit(self): # for compatibility with parent class
|
||||||
|
return self.length
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gauge_str(self):
|
||||||
|
if not self.gauge:
|
||||||
|
return None
|
||||||
|
actual_gauge = f"{self.gauge.number} {self.gauge.unit}"
|
||||||
|
actual_gauge = actual_gauge.replace("mm2", "mm\u00B2")
|
||||||
|
return actual_gauge
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gauge_str_with_equiv(self):
|
||||||
|
if not self.gauge:
|
||||||
|
return None
|
||||||
|
actual_gauge = self.gauge_str
|
||||||
|
equivalent_gauge = ""
|
||||||
|
if self.show_equiv:
|
||||||
|
# convert unit if known
|
||||||
|
if self.gauge.unit == "mm2":
|
||||||
|
equivalent_gauge = f" ({awg_equiv(self.gauge.number)} AWG)"
|
||||||
|
elif self.gauge.unit.upper() == "AWG":
|
||||||
|
equivalent_gauge = f" ({mm2_equiv(self.gauge.number)} mm2)"
|
||||||
|
out = f"{actual_gauge}{equivalent_gauge}"
|
||||||
|
out = out.replace("mm2", "mm\u00B2")
|
||||||
|
return out
|
||||||
|
|
||||||
|
@property
|
||||||
|
def length_str(self):
|
||||||
|
if not self.length:
|
||||||
|
return None
|
||||||
|
out = f"{self.length.number} {self.length.unit}"
|
||||||
|
return out
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bom_hash(self):
|
||||||
|
if self.category == "bundle":
|
||||||
|
# This line should never be reached, since caller checks
|
||||||
|
# whether item is a bundle and if so, calls bom_hash
|
||||||
|
# for each individual wire instead
|
||||||
|
raise Exception("Do this at the wire level!")
|
||||||
|
else:
|
||||||
|
return super().bom_hash
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self) -> str:
|
||||||
|
if self.category == "bundle":
|
||||||
|
raise Exception("Do this at the wire level!")
|
||||||
|
else:
|
||||||
|
substrs = [
|
||||||
|
("", "Cable"),
|
||||||
|
(", ", self.type),
|
||||||
|
(", ", self.subtype),
|
||||||
|
(", ", self.wirecount),
|
||||||
|
(" ", f"x {self.gauge_str}" if self.gauge else "wires"),
|
||||||
|
(" ", "shielded" if self.shield else None),
|
||||||
|
(", ", str(self.color) if self.color else None),
|
||||||
|
]
|
||||||
|
desc = "".join(
|
||||||
|
[f"{s[0]}{s[1]}" for s in substrs if s[1] is not None and s[1] != ""]
|
||||||
|
)
|
||||||
|
return desc
|
||||||
|
|
||||||
|
def _get_wire_partnumber(self, idx) -> PartNumberInfo:
|
||||||
|
def _get_correct_element(inp, idx):
|
||||||
|
return inp[idx] if isinstance(inp, List) else inp
|
||||||
|
|
||||||
|
# TODO: possibly make more robust/elegant
|
||||||
|
if self.category == "bundle":
|
||||||
|
return PartNumberInfo(
|
||||||
|
_get_correct_element(self.partnumbers.pn, idx),
|
||||||
|
_get_correct_element(self.partnumbers.manufacturer, idx),
|
||||||
|
_get_correct_element(self.partnumbers.mpn, idx),
|
||||||
|
_get_correct_element(self.partnumbers.supplier, idx),
|
||||||
|
_get_correct_element(self.partnumbers.spn, idx),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return None # non-bundles do not support lists of part data
|
||||||
|
|
||||||
|
def __post_init__(self) -> None:
|
||||||
|
super().__post_init__()
|
||||||
|
|
||||||
|
self.bgcolor_title = SingleColor(self.bgcolor_title)
|
||||||
|
self.color = MultiColor(self.color)
|
||||||
|
|
||||||
|
# cables do not support custom qty or amount
|
||||||
|
if self.qty is None:
|
||||||
|
self.qty = 1
|
||||||
|
if self.qty != 1:
|
||||||
|
raise Exception("Cable qty != 1 not supported")
|
||||||
|
|
||||||
|
if isinstance(self.image, dict):
|
||||||
|
self.image = Image(**self.image)
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# allow gauge, length, and other fields to be lists too (like part numbers),
|
||||||
|
# and assign them the same way to bundles.
|
||||||
|
|
||||||
|
self.gauge = parse_number_and_unit(self.gauge, "mm2")
|
||||||
|
self.length = parse_number_and_unit(self.length, "m")
|
||||||
|
self.amount = self.length # for BOM
|
||||||
|
|
||||||
|
if self.wirecount: # number of wires explicitly defined
|
||||||
|
if self.colors: # use custom color palette (partly or looped if needed)
|
||||||
|
self.colors = [
|
||||||
|
self.colors[i % len(self.colors)] for i in range(self.wirecount)
|
||||||
|
]
|
||||||
|
elif self.color_code:
|
||||||
|
# use standard color palette (partly or looped if needed)
|
||||||
|
if self.color_code not in COLOR_CODES:
|
||||||
|
raise Exception("Unknown color code")
|
||||||
|
self.colors = [
|
||||||
|
get_color_by_colorcode_index(self.color_code, i)
|
||||||
|
for i in range(self.wirecount)
|
||||||
|
]
|
||||||
|
else: # no colors defined, add dummy colors
|
||||||
|
self.colors = [""] * self.wirecount
|
||||||
|
|
||||||
|
else: # wirecount implicit in length of color list
|
||||||
|
if not self.colors:
|
||||||
|
raise Exception(
|
||||||
|
"Unknown number of wires. "
|
||||||
|
"Must specify wirecount or colors (implicit length)"
|
||||||
|
)
|
||||||
|
self.wirecount = len(self.colors)
|
||||||
|
|
||||||
|
if self.wirelabels:
|
||||||
|
if self.shield and "s" in self.wirelabels:
|
||||||
|
raise Exception(
|
||||||
|
'"s" may not be used as a wire label for a shielded cable.'
|
||||||
|
)
|
||||||
|
|
||||||
|
# if lists of part numbers are provided,
|
||||||
|
# check this is a bundle and that it matches the wirecount.
|
||||||
|
for idfield in [self.manufacturer, self.mpn, self.supplier, self.spn, self.pn]:
|
||||||
|
if isinstance(idfield, list):
|
||||||
|
if self.category == "bundle":
|
||||||
|
# check the length
|
||||||
|
if len(idfield) != self.wirecount:
|
||||||
|
raise Exception("lists of part data must match wirecount")
|
||||||
|
else:
|
||||||
|
raise Exception("lists of part data are only supported for bundles")
|
||||||
|
|
||||||
|
# all checks have passed
|
||||||
|
wire_tuples = zip_longest(
|
||||||
|
# TODO: self.wire_ids
|
||||||
|
self.colors,
|
||||||
|
self.wirelabels,
|
||||||
|
)
|
||||||
|
for wire_index, (wire_color, wire_label) in enumerate(wire_tuples):
|
||||||
|
id = wire_index + 1
|
||||||
|
self.wire_objects[id] = WireClass(
|
||||||
|
parent=self.designator,
|
||||||
|
# wire-specific properties
|
||||||
|
index=wire_index, # TODO: wire_id
|
||||||
|
id=id, # TODO: wire_id
|
||||||
|
label=wire_label,
|
||||||
|
color=MultiColor(wire_color),
|
||||||
|
# inheritable from parent cable
|
||||||
|
type=self.type,
|
||||||
|
subtype=self.subtype,
|
||||||
|
gauge=self.gauge,
|
||||||
|
length=self.length,
|
||||||
|
sum_amounts_in_bom=self.sum_amounts_in_bom,
|
||||||
|
ignore_in_bom=self.ignore_in_bom,
|
||||||
|
partnumbers=self._get_wire_partnumber(wire_index),
|
||||||
|
)
|
||||||
|
|
||||||
|
if self.shield:
|
||||||
|
index_offset = len(self.wire_objects)
|
||||||
|
# TODO: add support for multiple shields
|
||||||
|
id = "s"
|
||||||
|
self.wire_objects[id] = ShieldClass(
|
||||||
|
index=index_offset,
|
||||||
|
id=id,
|
||||||
|
label="Shield",
|
||||||
|
color=(
|
||||||
|
MultiColor(self.shield)
|
||||||
|
if isinstance(self.shield, str)
|
||||||
|
else MultiColor(None)
|
||||||
|
),
|
||||||
|
parent=self.designator,
|
||||||
|
)
|
||||||
|
|
||||||
|
if self.show_name is None:
|
||||||
|
self.show_name = not self.is_autogenerated
|
||||||
|
|
||||||
|
if self.show_wirenumbers is None:
|
||||||
|
# by default, show wire numbers for cables, hide for bundles
|
||||||
|
self.show_wirenumbers = self.category != "bundle"
|
||||||
|
|
||||||
|
for i, item in enumerate(self.additional_components):
|
||||||
|
if isinstance(item, dict):
|
||||||
|
self.additional_components[i] = AdditionalComponent(**item)
|
||||||
|
|
||||||
|
def _connect(
|
||||||
|
self,
|
||||||
|
from_pin_obj: List[PinClass],
|
||||||
|
via_wire_id: str,
|
||||||
|
to_pin_obj: List[PinClass],
|
||||||
|
) -> None:
|
||||||
|
via_wire_obj = self.wire_objects[via_wire_id]
|
||||||
|
self._connections.append(Connection(from_pin_obj, via_wire_obj, to_pin_obj))
|
||||||
|
|
||||||
|
def compute_qty_multipliers(self):
|
||||||
|
# do not run before all connections in harness have been made!
|
||||||
|
total_length = sum(
|
||||||
|
[
|
||||||
|
wire.length.number if wire.length else 0
|
||||||
|
for wire in self.wire_objects.values()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
qty_multipliers_computed = {
|
||||||
|
"WIRECOUNT": len(self.wire_objects),
|
||||||
|
# "TERMINATIONS": ___, # TODO
|
||||||
|
"LENGTH": self.length.number if self.length else 0,
|
||||||
|
"TOTAL_LENGTH": total_length,
|
||||||
|
}
|
||||||
|
for subitem in self.additional_components:
|
||||||
|
if isinstance(subitem.qty_multiplier, QtyMultiplierCable):
|
||||||
|
computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name]
|
||||||
|
if subitem.qty_multiplier.name in ["LENGTH", "TOTAL_LENGTH"]:
|
||||||
|
# since length can have a unit, use amount fields to hold
|
||||||
|
if subitem.amount is not None:
|
||||||
|
raise Exception(
|
||||||
|
f"No amount may be specified when using "
|
||||||
|
f"{subitem.qty_multiplier.name} as a multiplier."
|
||||||
|
)
|
||||||
|
subitem.qty_computed = subitem.qty if subitem.qty else 1
|
||||||
|
subitem.amount_computed = NumberAndUnit(
|
||||||
|
computed_factor, self.length.unit
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# multiplier unrelated to length, therefore no unit
|
||||||
|
if subitem.qty is not None:
|
||||||
|
subitem.qty_computed = subitem.qty * computed_factor
|
||||||
|
else:
|
||||||
|
subitem.qty_computed = computed_factor
|
||||||
|
subitem.amount_computed = subitem.amount
|
||||||
|
|
||||||
|
elif isinstance(subitem.qty_multiplier, QtyMultiplierConnector):
|
||||||
|
raise Exception("Used a connector multiplier in a cable!")
|
||||||
|
else: # int or float
|
||||||
|
if subitem.qty is not None:
|
||||||
|
subitem.qty_computed = subitem.qty * subitem.qty_multiplier
|
||||||
|
else:
|
||||||
|
subitem.qty_computed = subitem.qty_multiplier
|
||||||
|
subitem.amount_computed = subitem.amount
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MatePin:
|
||||||
|
from_: PinClass
|
||||||
|
to: PinClass
|
||||||
|
arrow: Arrow
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MateComponent:
|
||||||
|
from_: str # Designator
|
||||||
|
to: str # Designator
|
||||||
|
arrow: Arrow
|
||||||
632
src/wireviz/wv_graphviz.py
Normal file
@ -0,0 +1,632 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import re
|
||||||
|
import warnings
|
||||||
|
from itertools import zip_longest
|
||||||
|
from typing import Any, List, Optional, Tuple, Union
|
||||||
|
|
||||||
|
from wireviz import APP_NAME, APP_URL, __version__
|
||||||
|
from wireviz.wv_bom import partnumbers2list
|
||||||
|
from wireviz.wv_colors import MultiColor
|
||||||
|
from wireviz.wv_dataclasses import (
|
||||||
|
ArrowDirection,
|
||||||
|
ArrowWeight,
|
||||||
|
Cable,
|
||||||
|
Component,
|
||||||
|
Connector,
|
||||||
|
MateComponent,
|
||||||
|
MatePin,
|
||||||
|
Options,
|
||||||
|
PartNumberInfo,
|
||||||
|
ShieldClass,
|
||||||
|
WireClass,
|
||||||
|
)
|
||||||
|
from wireviz.wv_html import Img, Table, Td, Tr
|
||||||
|
from wireviz.wv_utils import html_line_breaks, remove_links
|
||||||
|
|
||||||
|
|
||||||
|
def gv_node_component(component: Component) -> Table:
|
||||||
|
# If no wires connected (except maybe loop wires)?
|
||||||
|
if isinstance(component, Connector):
|
||||||
|
if not (component.ports_left or component.ports_right):
|
||||||
|
component.ports_left = True # Use left side pins by default
|
||||||
|
|
||||||
|
# generate all rows to be shown in the node
|
||||||
|
if component.show_name:
|
||||||
|
str_name = f"{remove_links(component.designator)}"
|
||||||
|
line_name = Td(str_name, bgcolor=component.bgcolor_title.html)
|
||||||
|
else:
|
||||||
|
line_name = None
|
||||||
|
|
||||||
|
line_pn = partnumbers2list(component.partnumbers)
|
||||||
|
|
||||||
|
is_simple_connector = (
|
||||||
|
isinstance(component, Connector) and component.style == "simple"
|
||||||
|
)
|
||||||
|
|
||||||
|
if isinstance(component, Connector):
|
||||||
|
line_info = [
|
||||||
|
bom_bubble(component.bom_id),
|
||||||
|
html_line_breaks(component.type),
|
||||||
|
html_line_breaks(component.subtype),
|
||||||
|
f"{component.pincount}-pin" if component.show_pincount else None,
|
||||||
|
str(component.color) if component.color else None,
|
||||||
|
]
|
||||||
|
elif isinstance(component, Cable):
|
||||||
|
line_info = [
|
||||||
|
bom_bubble(component.bom_id) if component.category != "bundle" else None,
|
||||||
|
html_line_breaks(component.type),
|
||||||
|
f"{component.wirecount}x" if component.show_wirecount else None,
|
||||||
|
component.gauge_str_with_equiv,
|
||||||
|
"+ S" if component.shield else None,
|
||||||
|
component.length_str,
|
||||||
|
str(component.color) if component.color else None,
|
||||||
|
]
|
||||||
|
|
||||||
|
if component.additional_parameters:
|
||||||
|
line_additional_parameters = nested_table_dict(component.additional_parameters)
|
||||||
|
else:
|
||||||
|
line_additional_parameters = []
|
||||||
|
|
||||||
|
if component.color:
|
||||||
|
line_info.extend(colorbar_cells(component.color))
|
||||||
|
|
||||||
|
line_image, line_image_caption = image_and_caption_cells(component)
|
||||||
|
line_additional_component_table = gv_additional_component_table(component)
|
||||||
|
line_notes = [Td(html_line_breaks(component.notes), balign="left")]
|
||||||
|
|
||||||
|
if isinstance(component, Connector):
|
||||||
|
if component.style != "simple":
|
||||||
|
line_ports = gv_pin_table(component)
|
||||||
|
else:
|
||||||
|
line_ports = None
|
||||||
|
elif isinstance(component, Cable):
|
||||||
|
line_ports = gv_conductor_table(component)
|
||||||
|
|
||||||
|
lines = [
|
||||||
|
line_name,
|
||||||
|
line_pn,
|
||||||
|
line_info,
|
||||||
|
line_additional_parameters,
|
||||||
|
line_ports,
|
||||||
|
line_image,
|
||||||
|
line_image_caption,
|
||||||
|
line_additional_component_table,
|
||||||
|
line_notes,
|
||||||
|
]
|
||||||
|
|
||||||
|
tbl = nested_table(lines)
|
||||||
|
if is_simple_connector:
|
||||||
|
# Simple connectors have no pin table, and therefore, no ports to attach wires to.
|
||||||
|
# Manually assign left and right ports here if required.
|
||||||
|
# Use table itself for right port, and the first cell for left port.
|
||||||
|
# Even if the table only has one cell, two separate ports can still be assigned.
|
||||||
|
tbl.update_attribs(port="p1r")
|
||||||
|
first_cell_in_tbl = tbl.contents[0].contents
|
||||||
|
first_cell_in_tbl.update_attribs(port="p1l")
|
||||||
|
|
||||||
|
return tbl
|
||||||
|
|
||||||
|
|
||||||
|
def gv_additional_component_table(component):
|
||||||
|
if not component.additional_components:
|
||||||
|
return None
|
||||||
|
|
||||||
|
rows = []
|
||||||
|
for subitem in component.additional_components:
|
||||||
|
|
||||||
|
if subitem.explicit_qty:
|
||||||
|
text_qty, unit_qty = subitem.qty_computed, "x"
|
||||||
|
if subitem.amount_computed is not None:
|
||||||
|
text_desc = f"{subitem.amount_computed.number} {subitem.amount_computed.unit} {subitem.description}"
|
||||||
|
else:
|
||||||
|
text_desc = f"{subitem.description}"
|
||||||
|
else:
|
||||||
|
if subitem.amount_computed is not None:
|
||||||
|
text_qty, unit_qty = (
|
||||||
|
subitem.amount_computed.number,
|
||||||
|
subitem.amount_computed.unit,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
text_qty, unit_qty = "1", "x"
|
||||||
|
text_desc = subitem.description
|
||||||
|
|
||||||
|
firstline = [
|
||||||
|
Td(bom_bubble(subitem.bom_id)),
|
||||||
|
Td(text_qty, align="right"),
|
||||||
|
Td(unit_qty, align="left"),
|
||||||
|
Td(text_desc, align="left"),
|
||||||
|
Td(f"{subitem.note if subitem.note else ''}", align="left"),
|
||||||
|
]
|
||||||
|
rows.append(Tr(firstline))
|
||||||
|
|
||||||
|
if subitem.has_pn_info:
|
||||||
|
pn_list = partnumbers2list(subitem.partnumbers)
|
||||||
|
secondline = [
|
||||||
|
Td("", colspan=3),
|
||||||
|
Td(", ".join(pn for pn in pn_list if pn), align="left"),
|
||||||
|
Td(""),
|
||||||
|
]
|
||||||
|
rows.append(Tr(secondline))
|
||||||
|
|
||||||
|
return Table(rows, border=1, cellborder=0, cellpadding=3, cellspacing=0)
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_node_bgcolor(component, harness_options):
|
||||||
|
# assign component node bgcolor at the GraphViz node level
|
||||||
|
# instead of at the HTML table level for better rendering of node outline
|
||||||
|
if component.bgcolor:
|
||||||
|
return component.bgcolor.html
|
||||||
|
elif isinstance(component, Connector) and harness_options.bgcolor_connector:
|
||||||
|
return harness_options.bgcolor_connector.html
|
||||||
|
elif (
|
||||||
|
isinstance(component, Cable)
|
||||||
|
and component.category == "bundle"
|
||||||
|
and harness_options.bgcolor_bundle
|
||||||
|
):
|
||||||
|
return harness_options.bgcolor_bundle.html
|
||||||
|
elif isinstance(component, Cable) and harness_options.bgcolor_cable:
|
||||||
|
return harness_options.bgcolor_cable.html
|
||||||
|
|
||||||
|
|
||||||
|
def bom_bubble(id) -> Table:
|
||||||
|
if id is None:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
# TODO: activate BOM bubbles
|
||||||
|
return None
|
||||||
|
# size and style of BOM bubble is optimized to be a rounded square,
|
||||||
|
# big enough to hold any two-digit ID without GraphViz warnings
|
||||||
|
text = id
|
||||||
|
# text = f'<FONT COLOR="#FFFFFF">{id}</FONT>'
|
||||||
|
return Table(
|
||||||
|
Tr(
|
||||||
|
Td(
|
||||||
|
text,
|
||||||
|
border=1,
|
||||||
|
cellpadding=0,
|
||||||
|
fixedsize="true",
|
||||||
|
style="rounded",
|
||||||
|
height=20,
|
||||||
|
width=20,
|
||||||
|
# bgcolor="#000000",
|
||||||
|
)
|
||||||
|
),
|
||||||
|
border=0,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def make_list_of_cells(inp) -> List[Td]:
|
||||||
|
# inp may be List,
|
||||||
|
if isinstance(inp, List):
|
||||||
|
# ensure all list items are Td
|
||||||
|
list_out = [item if isinstance(item, Td) else Td(item) for item in inp]
|
||||||
|
return list_out
|
||||||
|
else:
|
||||||
|
if inp is None:
|
||||||
|
return []
|
||||||
|
if isinstance(inp, Td):
|
||||||
|
return [inp]
|
||||||
|
else:
|
||||||
|
return [Td(inp)]
|
||||||
|
|
||||||
|
|
||||||
|
def nested_table(lines: List[Td]) -> Table:
|
||||||
|
cell_lists = [make_list_of_cells(line) for line in lines]
|
||||||
|
rows = []
|
||||||
|
|
||||||
|
for lst in cell_lists:
|
||||||
|
if len(lst) == 0:
|
||||||
|
continue # no cells in list
|
||||||
|
cells = [item for item in lst if item.contents is not None]
|
||||||
|
if len(cells) == 0:
|
||||||
|
continue # no cells in list, or all cells are None
|
||||||
|
if (
|
||||||
|
len(cells) == 1
|
||||||
|
and isinstance(cells[0].contents, Table)
|
||||||
|
and not "!" in cells[0].contents.attribs.get("id", "")
|
||||||
|
):
|
||||||
|
# cell content is already a table, no need to re-wrap it;
|
||||||
|
# unless explicitly asked to by a "!" in the ID field
|
||||||
|
# as used by image_and_caption_cells()
|
||||||
|
inner_table = cells[0].contents
|
||||||
|
else:
|
||||||
|
# nest cell content inside a table
|
||||||
|
inner_table = Table(
|
||||||
|
Tr(cells), border=0, cellborder=1, cellpadding=3, cellspacing=0
|
||||||
|
)
|
||||||
|
rows.append(Tr(Td(inner_table)))
|
||||||
|
|
||||||
|
if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty <table>
|
||||||
|
inner_table = Table(
|
||||||
|
Tr(Td("")), border=0, cellborder=1, cellpadding=3, cellspacing=0
|
||||||
|
)
|
||||||
|
rows = [Tr(Td(inner_table))]
|
||||||
|
tbl = Table(rows, border=0, cellspacing=0, cellpadding=0)
|
||||||
|
return tbl
|
||||||
|
|
||||||
|
|
||||||
|
def nested_table_dict(d: dict) -> Table:
|
||||||
|
rows = []
|
||||||
|
for k, v in d.items():
|
||||||
|
rows.append(
|
||||||
|
Tr(
|
||||||
|
[
|
||||||
|
Td(k, align="left", balign="left", valign="top"),
|
||||||
|
Td(html_line_breaks(v), align="left", balign="left"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return Table(rows, border=0, cellborder=1, cellpadding=3, cellspacing=0)
|
||||||
|
|
||||||
|
|
||||||
|
def gv_pin_table(component) -> Table:
|
||||||
|
pin_rows = []
|
||||||
|
for pin in component.pin_objects.values():
|
||||||
|
if component.should_show_pin(pin.id):
|
||||||
|
pin_rows.append(gv_pin_row(pin, component))
|
||||||
|
if len(pin_rows) == 0:
|
||||||
|
# TODO: write test for empty pin tables, and for unconnected connectors that hide disconnected pins
|
||||||
|
pass
|
||||||
|
tbl = Table(pin_rows, border=0, cellborder=1, cellpadding=3, cellspacing=0)
|
||||||
|
return tbl
|
||||||
|
|
||||||
|
|
||||||
|
def gv_pin_row(pin, connector) -> Tr:
|
||||||
|
# ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers
|
||||||
|
has_pincolors = any([_pin.color for _pin in connector.pin_objects.values()])
|
||||||
|
cells = [
|
||||||
|
Td(pin.id, port=f"p{pin.index+1}l") if connector.ports_left else None,
|
||||||
|
Td(pin.label, delete_if_empty=True),
|
||||||
|
Td(str(pin.color) if pin.color else "", sides="TBL") if has_pincolors else None,
|
||||||
|
Td(color_minitable(pin.color), sides="TBR") if has_pincolors else None,
|
||||||
|
Td(pin.id, port=f"p{pin.index+1}r") if connector.ports_right else None,
|
||||||
|
]
|
||||||
|
return Tr(cells)
|
||||||
|
|
||||||
|
|
||||||
|
def gv_connector_loops(connector: Connector) -> List:
|
||||||
|
loop_edges = []
|
||||||
|
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 loop in connector.loops:
|
||||||
|
head = f"{connector.designator}:p{loop[0]}{loop_side}:{loop_dir}"
|
||||||
|
tail = f"{connector.designator}:p{loop[1]}{loop_side}:{loop_dir}"
|
||||||
|
loop_edges.append((head, tail))
|
||||||
|
return loop_edges
|
||||||
|
|
||||||
|
|
||||||
|
def gv_conductor_table(cable) -> Table:
|
||||||
|
rows = []
|
||||||
|
rows.append(Tr(Td(" "))) # spacer row on top
|
||||||
|
|
||||||
|
inserted_break_inbetween = False
|
||||||
|
for wire in cable.wire_objects.values():
|
||||||
|
# insert blank space between wires and shields
|
||||||
|
if isinstance(wire, ShieldClass) and not inserted_break_inbetween:
|
||||||
|
rows.append(Tr(Td(" "))) # spacer row between wires and shields
|
||||||
|
inserted_break_inbetween = True
|
||||||
|
|
||||||
|
# row above the wire
|
||||||
|
wireinfo = []
|
||||||
|
if cable.show_wirenumbers and not isinstance(wire, ShieldClass):
|
||||||
|
wireinfo.append(str(wire.id))
|
||||||
|
wireinfo.append(str(wire.color))
|
||||||
|
wireinfo.append(wire.label)
|
||||||
|
|
||||||
|
ins, outs = [], []
|
||||||
|
for conn in cable._connections:
|
||||||
|
if conn.via.id == wire.id:
|
||||||
|
if conn.from_ is not None:
|
||||||
|
ins.append(str(conn.from_))
|
||||||
|
if conn.to is not None:
|
||||||
|
outs.append(str(conn.to))
|
||||||
|
|
||||||
|
cells_above = [
|
||||||
|
Td(" " + ", ".join(ins), align="left"),
|
||||||
|
Td(" "), # increase cell spacing here
|
||||||
|
Td(bom_bubble(wire.bom_id)) if cable.category == "bundle" else None,
|
||||||
|
Td(":".join([wi for wi in wireinfo if wi is not None and wi != ""])),
|
||||||
|
Td(" "), # increase cell spacing here
|
||||||
|
Td(", ".join(outs) + " ", align="right"),
|
||||||
|
]
|
||||||
|
cells_above = [cell for cell in cells_above if cell is not None]
|
||||||
|
rows.append(Tr(cells_above))
|
||||||
|
|
||||||
|
# the wire itself
|
||||||
|
rows.append(Tr(gv_wire_cell(wire, len(cells_above))))
|
||||||
|
|
||||||
|
# row below the wire
|
||||||
|
if wire.partnumbers:
|
||||||
|
cells_below = partnumbers2list(
|
||||||
|
wire.partnumbers, parent_partnumbers=cable.partnumbers
|
||||||
|
)
|
||||||
|
if cells_below is not None and len(cells_below) > 0:
|
||||||
|
table_below = (
|
||||||
|
Table(
|
||||||
|
Tr([Td(cell) for cell in cells_below]),
|
||||||
|
border=0,
|
||||||
|
cellborder=0,
|
||||||
|
cellspacing=0,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rows.append(Tr(Td(table_below, colspan=len(cells_above))))
|
||||||
|
|
||||||
|
rows.append(Tr(Td(" "))) # spacer row on bottom
|
||||||
|
tbl = Table(rows, border=0, cellborder=0, cellspacing=0)
|
||||||
|
return tbl
|
||||||
|
|
||||||
|
|
||||||
|
def gv_wire_cell(wire: Union[WireClass, ShieldClass], colspan: int) -> Td:
|
||||||
|
if wire.color:
|
||||||
|
color_list = ["#000000"] + wire.color.html_padded_list + ["#000000"]
|
||||||
|
else:
|
||||||
|
color_list = ["#000000"]
|
||||||
|
|
||||||
|
wire_inner_rows = []
|
||||||
|
for j, bgcolor in enumerate(color_list[::-1]):
|
||||||
|
wire_inner_cell_attribs = {
|
||||||
|
"bgcolor": bgcolor if bgcolor != "" else "#000000",
|
||||||
|
"border": 0,
|
||||||
|
"cellpadding": 0,
|
||||||
|
"colspan": colspan,
|
||||||
|
"height": 2,
|
||||||
|
}
|
||||||
|
wire_inner_rows.append(Tr(Td("", **wire_inner_cell_attribs)))
|
||||||
|
wire_inner_table = Table(wire_inner_rows, border=0, cellborder=0, cellspacing=0)
|
||||||
|
wire_outer_cell_attribs = {
|
||||||
|
"border": 0,
|
||||||
|
"cellspacing": 0,
|
||||||
|
"cellpadding": 0,
|
||||||
|
"colspan": colspan,
|
||||||
|
"height": 2 * len(color_list),
|
||||||
|
"port": f"w{wire.index+1}",
|
||||||
|
}
|
||||||
|
# ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers
|
||||||
|
wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs)
|
||||||
|
|
||||||
|
return wire_outer_cell
|
||||||
|
|
||||||
|
|
||||||
|
def gv_edge_wire(harness, cable, connection) -> Tuple[str, str, str, str, str]:
|
||||||
|
if connection.via.color:
|
||||||
|
# check if it's an actual wire and not a shield
|
||||||
|
color = f"#000000:{connection.via.color.html_padded}:#000000"
|
||||||
|
else: # it's a shield connection
|
||||||
|
color = "#000000"
|
||||||
|
|
||||||
|
if connection.from_ is not None: # connect to left
|
||||||
|
from_port_str = (
|
||||||
|
f":p{connection.from_.index+1}r"
|
||||||
|
if harness.connectors[connection.from_.parent].style != "simple"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
code_left_1 = f"{connection.from_.parent}{from_port_str}:e"
|
||||||
|
code_left_2 = f"{connection.via.parent}:w{connection.via.index+1}:w"
|
||||||
|
# ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers
|
||||||
|
else:
|
||||||
|
code_left_1, code_left_2 = None, None
|
||||||
|
|
||||||
|
if connection.to is not None: # connect to right
|
||||||
|
to_port_str = (
|
||||||
|
f":p{connection.to.index+1}l"
|
||||||
|
if harness.connectors[connection.to.parent].style != "simple"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
code_right_1 = f"{connection.via.parent}:w{connection.via.index+1}:e"
|
||||||
|
code_right_2 = f"{connection.to.parent}{to_port_str}:w"
|
||||||
|
else:
|
||||||
|
code_right_1, code_right_2 = None, None
|
||||||
|
|
||||||
|
return color, code_left_1, code_left_2, code_right_1, code_right_2
|
||||||
|
|
||||||
|
|
||||||
|
def parse_arrow_str(inp: str) -> ArrowDirection:
|
||||||
|
if inp[0] == "<" and inp[-1] == ">":
|
||||||
|
return ArrowDirection.BOTH
|
||||||
|
elif inp[0] == "<":
|
||||||
|
return ArrowDirection.BACK
|
||||||
|
elif inp[-1] == ">":
|
||||||
|
return ArrowDirection.FORWARD
|
||||||
|
else:
|
||||||
|
return ArrowDirection.NONE
|
||||||
|
|
||||||
|
|
||||||
|
def gv_edge_mate(mate) -> Tuple[str, str, str, str]:
|
||||||
|
if mate.arrow.weight == ArrowWeight.SINGLE:
|
||||||
|
color = "#000000"
|
||||||
|
elif mate.arrow.weight == ArrowWeight.DOUBLE:
|
||||||
|
color = "#000000:#000000"
|
||||||
|
|
||||||
|
dir = mate.arrow.direction.name.lower()
|
||||||
|
|
||||||
|
if isinstance(mate, MatePin):
|
||||||
|
from_pin_index = mate.from_.index
|
||||||
|
from_port_str = f":p{from_pin_index+1}r"
|
||||||
|
from_designator = mate.from_.parent
|
||||||
|
to_pin_index = mate.to.index
|
||||||
|
to_port_str = f":p{to_pin_index+1}l"
|
||||||
|
to_designator = mate.to.parent
|
||||||
|
elif isinstance(mate, MateComponent):
|
||||||
|
from_designator = mate.from_
|
||||||
|
from_port_str = ""
|
||||||
|
to_designator = mate.to
|
||||||
|
to_port_str = ""
|
||||||
|
else:
|
||||||
|
raise Exception(f"Unknown type of mate:\n{mate}")
|
||||||
|
|
||||||
|
code_from = f"{from_designator}{from_port_str}:e"
|
||||||
|
code_to = f"{to_designator}{to_port_str}:w"
|
||||||
|
|
||||||
|
return color, dir, code_from, code_to
|
||||||
|
|
||||||
|
|
||||||
|
def colorbar_cells(color, mini=False) -> List[Td]:
|
||||||
|
cells = []
|
||||||
|
mini = {"height": 8, "width": 8, "fixedsize": "true"} if mini else {}
|
||||||
|
for index, subcolor in enumerate(color.colors):
|
||||||
|
sides_l = "L" if index == 0 else ""
|
||||||
|
sides_r = "R" if index == len(color.colors) - 1 else ""
|
||||||
|
sides = "TB" + sides_l + sides_r
|
||||||
|
cells.append(Td("", bgcolor=subcolor.html, sides=sides, **mini))
|
||||||
|
return cells
|
||||||
|
|
||||||
|
|
||||||
|
def color_minitable(color: Optional[MultiColor]) -> Union[Table, str]:
|
||||||
|
if color is None or len(color) == 0:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
cells = colorbar_cells(color, mini=True)
|
||||||
|
|
||||||
|
return Table(
|
||||||
|
Tr(cells),
|
||||||
|
border=0,
|
||||||
|
cellborder=1,
|
||||||
|
cellspacing=0,
|
||||||
|
height=8,
|
||||||
|
width=8 * len(cells),
|
||||||
|
fixedsize="true",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def image_and_caption_cells(component: Component) -> Tuple[Td, Td]:
|
||||||
|
if not component.image:
|
||||||
|
return (None, None)
|
||||||
|
|
||||||
|
image_tag = Img(scale=component.image.scale, src=component.image.src)
|
||||||
|
image_cell_inner = Td(image_tag, flat=True)
|
||||||
|
if component.image.fixedsize:
|
||||||
|
# further nest the image in a table with width/height/fixedsize parameters,
|
||||||
|
# and place that table in a cell
|
||||||
|
image_cell_inner.update_attribs(**html_size_attr_dict(component.image))
|
||||||
|
image_cell = Td(
|
||||||
|
Table(Tr(image_cell_inner), border=0, cellborder=0, cellspacing=0, id="!")
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
image_cell = image_cell_inner
|
||||||
|
|
||||||
|
image_cell.update_attribs(
|
||||||
|
balign="left",
|
||||||
|
bgcolor=component.image.bgcolor.html,
|
||||||
|
sides="TLR" if component.image.caption else None,
|
||||||
|
)
|
||||||
|
|
||||||
|
if component.image.caption:
|
||||||
|
caption_cell = Td(
|
||||||
|
f"{html_line_breaks(component.image.caption)}", balign="left", sides="BLR"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
caption_cell = None
|
||||||
|
return (image_cell, caption_cell)
|
||||||
|
|
||||||
|
|
||||||
|
def html_size_attr_dict(image):
|
||||||
|
# Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object
|
||||||
|
pass
|
||||||
|
|
||||||
|
attr_dict = {}
|
||||||
|
if image:
|
||||||
|
if image.width:
|
||||||
|
attr_dict["width"] = image.width
|
||||||
|
if image.height:
|
||||||
|
attr_dict["height"] = image.height
|
||||||
|
if image.fixedsize:
|
||||||
|
attr_dict["fixedsize"] = "true"
|
||||||
|
return attr_dict
|
||||||
|
|
||||||
|
|
||||||
|
def set_dot_basics(dot, options):
|
||||||
|
dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n")
|
||||||
|
dot.body.append(f"// {APP_URL}\n")
|
||||||
|
dot.attr(
|
||||||
|
"graph",
|
||||||
|
rankdir="LR",
|
||||||
|
ranksep="2",
|
||||||
|
bgcolor=options.bgcolor.html,
|
||||||
|
nodesep="0.33",
|
||||||
|
fontname=options.fontname,
|
||||||
|
)
|
||||||
|
dot.attr(
|
||||||
|
"node",
|
||||||
|
shape="none",
|
||||||
|
width="0",
|
||||||
|
height="0",
|
||||||
|
margin="0", # Actual size of the node is entirely determined by the label.
|
||||||
|
style="filled",
|
||||||
|
fillcolor=options.bgcolor_node.html,
|
||||||
|
fontname=options.fontname,
|
||||||
|
)
|
||||||
|
dot.attr("edge", style="bold", fontname=options.fontname)
|
||||||
|
|
||||||
|
|
||||||
|
def apply_dot_tweaks(dot, tweak):
|
||||||
|
def typecheck(name: str, value: Any, expect: type) -> None:
|
||||||
|
if not isinstance(value, expect):
|
||||||
|
raise Exception(
|
||||||
|
f"Unexpected value type of {name}: "
|
||||||
|
f"Expected {expect}, got {type(value)}\n{value}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO?: Differ between override attributes and HTML?
|
||||||
|
if tweak.override is not None:
|
||||||
|
typecheck("tweak.override", tweak.override, dict)
|
||||||
|
for k, d in tweak.override.items():
|
||||||
|
typecheck(f"tweak.override.{k} key", k, str)
|
||||||
|
typecheck(f"tweak.override.{k} value", d, dict)
|
||||||
|
for a, v in d.items():
|
||||||
|
typecheck(f"tweak.override.{k}.{a} key", a, str)
|
||||||
|
typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None)))
|
||||||
|
|
||||||
|
# Override generated attributes of selected entries matching tweak.override.
|
||||||
|
for i, entry in enumerate(dot.body):
|
||||||
|
if not isinstance(entry, str):
|
||||||
|
continue
|
||||||
|
# Find a possibly quoted keyword after leading TAB(s) and followed by [ ].
|
||||||
|
match = re.match(r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S)
|
||||||
|
keyword = match and match[2]
|
||||||
|
if not keyword in tweak.override.keys():
|
||||||
|
continue
|
||||||
|
|
||||||
|
for attr, value in tweak.override[keyword].items():
|
||||||
|
if value is None:
|
||||||
|
entry, n_subs = re.subn(
|
||||||
|
f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry
|
||||||
|
)
|
||||||
|
if n_subs < 1:
|
||||||
|
warnings.warn(f"tweak: {attr} not found in {keyword}!")
|
||||||
|
elif n_subs > 1:
|
||||||
|
warnings.warn(
|
||||||
|
f"tweak: {attr} removed {n_subs} times in {keyword}!"
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if len(value) == 0 or " " in value:
|
||||||
|
value = value.replace('"', r"\"")
|
||||||
|
value = f'"{value}"'
|
||||||
|
entry, n_subs = re.subn(
|
||||||
|
f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry
|
||||||
|
)
|
||||||
|
if n_subs < 1:
|
||||||
|
# If attr not found, then append it
|
||||||
|
entry = re.sub(r"\]$", f" {attr}={value}]", entry)
|
||||||
|
elif n_subs > 1:
|
||||||
|
warnings.warn(
|
||||||
|
f"tweak: {attr} overridden {n_subs} times in {keyword}!"
|
||||||
|
)
|
||||||
|
|
||||||
|
dot.body[i] = entry
|
||||||
|
|
||||||
|
if tweak.append is not None:
|
||||||
|
if isinstance(tweak.append, list):
|
||||||
|
for i, element in enumerate(tweak.append, 1):
|
||||||
|
typecheck(f"tweak.append[{i}]", element, str)
|
||||||
|
dot.body.extend(tweak.append)
|
||||||
|
else:
|
||||||
|
typecheck("tweak.append", tweak.append, str)
|
||||||
|
dot.body.append(tweak.append)
|
||||||
@ -1,111 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import re
|
|
||||||
from typing import List, Optional, Union
|
|
||||||
|
|
||||||
from wireviz.DataClasses import Color
|
|
||||||
from wireviz.wv_colors import translate_color
|
|
||||||
from wireviz.wv_helper import remove_links
|
|
||||||
|
|
||||||
|
|
||||||
def nested_html_table(
|
|
||||||
rows: List[Union[str, List[Optional[str]], None]], table_attrs: str = ""
|
|
||||||
) -> str:
|
|
||||||
# input: list, each item may be scalar or list
|
|
||||||
# output: a parent table with one child table per parent item that is list, and one cell per parent item that is scalar
|
|
||||||
# purpose: create the appearance of one table, where cell widths are independent between rows
|
|
||||||
# attributes in any leading <tdX> inside a list are injected into to the preceeding <td> tag
|
|
||||||
html = []
|
|
||||||
html.append(
|
|
||||||
f'<table border="0" cellspacing="0" cellpadding="0"{table_attrs or ""}>'
|
|
||||||
)
|
|
||||||
|
|
||||||
num_rows = 0
|
|
||||||
for row in rows:
|
|
||||||
if isinstance(row, List):
|
|
||||||
if len(row) > 0 and any(row):
|
|
||||||
html.append(" <tr><td>")
|
|
||||||
# fmt: off
|
|
||||||
html.append(' <table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>')
|
|
||||||
# fmt: on
|
|
||||||
for cell in row:
|
|
||||||
if cell is not None:
|
|
||||||
# Inject attributes to the preceeding <td> tag where needed
|
|
||||||
# fmt: off
|
|
||||||
html.append(f' <td balign="left">{cell}</td>'.replace("><tdX", ""))
|
|
||||||
# fmt: on
|
|
||||||
html.append(" </tr></table>")
|
|
||||||
html.append(" </td></tr>")
|
|
||||||
num_rows = num_rows + 1
|
|
||||||
elif row is not None:
|
|
||||||
html.append(" <tr><td>")
|
|
||||||
html.append(f" {row}")
|
|
||||||
html.append(" </td></tr>")
|
|
||||||
num_rows = num_rows + 1
|
|
||||||
if num_rows == 0: # empty table
|
|
||||||
# generate empty cell to avoid GraphViz errors
|
|
||||||
html.append("<tr><td></td></tr>")
|
|
||||||
html.append("</table>")
|
|
||||||
return html
|
|
||||||
|
|
||||||
|
|
||||||
def html_bgcolor_attr(color: Color) -> str:
|
|
||||||
"""Return attributes for bgcolor or '' if no color."""
|
|
||||||
return f' bgcolor="{translate_color(color, "HEX")}"' if color else ""
|
|
||||||
|
|
||||||
|
|
||||||
def html_bgcolor(color: Color, _extra_attr: str = "") -> str:
|
|
||||||
"""Return <td> attributes prefix for bgcolor or '' if no color."""
|
|
||||||
return f"<tdX{html_bgcolor_attr(color)}{_extra_attr}>" if color else ""
|
|
||||||
|
|
||||||
|
|
||||||
def html_colorbar(color: Color) -> str:
|
|
||||||
"""Return <tdX> attributes prefix for bgcolor and minimum width or None if no color."""
|
|
||||||
return html_bgcolor(color, ' width="4"') if color else None
|
|
||||||
|
|
||||||
|
|
||||||
def html_image(image):
|
|
||||||
from wireviz.DataClasses import Image
|
|
||||||
|
|
||||||
if not image:
|
|
||||||
return None
|
|
||||||
# The leading attributes belong to the preceeding tag. See where used below.
|
|
||||||
html = f'{html_size_attr(image)}><img scale="{image.scale}" src="{image.src}"/>'
|
|
||||||
if image.fixedsize:
|
|
||||||
# Close the preceeding tag and enclose the image cell in a table without
|
|
||||||
# borders to avoid narrow borders when the fixed width < the node width.
|
|
||||||
html = f""">
|
|
||||||
<table border="0" cellspacing="0" cellborder="0"><tr>
|
|
||||||
<td{html}</td>
|
|
||||||
</tr></table>
|
|
||||||
"""
|
|
||||||
return f"""<tdX{' sides="TLR"' if image.caption else ''}{html_bgcolor_attr(image.bgcolor)}{html}"""
|
|
||||||
|
|
||||||
|
|
||||||
def html_caption(image):
|
|
||||||
from wireviz.DataClasses import Image
|
|
||||||
|
|
||||||
return (
|
|
||||||
f'<tdX sides="BLR"{html_bgcolor_attr(image.bgcolor)}>{html_line_breaks(image.caption)}'
|
|
||||||
if image and image.caption
|
|
||||||
else None
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def html_size_attr(image):
|
|
||||||
from wireviz.DataClasses import Image
|
|
||||||
|
|
||||||
# Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object
|
|
||||||
return (
|
|
||||||
(
|
|
||||||
(f' width="{image.width}"' if image.width else "")
|
|
||||||
+ (f' height="{image.height}"' if image.height else "")
|
|
||||||
+ (' fixedsize="true"' if image.fixedsize else "")
|
|
||||||
)
|
|
||||||
if image
|
|
||||||
else ""
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def html_line_breaks(inp):
|
|
||||||
return remove_links(inp).replace("\n", "<br />") if isinstance(inp, str) else inp
|
|
||||||
441
src/wireviz/wv_harness.py
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List, Union
|
||||||
|
|
||||||
|
from graphviz import Graph
|
||||||
|
|
||||||
|
import wireviz.wv_colors
|
||||||
|
from wireviz.wv_bom import BomCategory, BomEntry, bom_list, print_bom_table
|
||||||
|
from wireviz.wv_dataclasses import (
|
||||||
|
AUTOGENERATED_PREFIX,
|
||||||
|
AdditionalBomItem,
|
||||||
|
Arrow,
|
||||||
|
ArrowWeight,
|
||||||
|
Cable,
|
||||||
|
Component,
|
||||||
|
Connector,
|
||||||
|
MateComponent,
|
||||||
|
MatePin,
|
||||||
|
Metadata,
|
||||||
|
Options,
|
||||||
|
Side,
|
||||||
|
TopLevelGraphicalComponent,
|
||||||
|
Tweak,
|
||||||
|
)
|
||||||
|
from wireviz.wv_graphviz import (
|
||||||
|
apply_dot_tweaks,
|
||||||
|
calculate_node_bgcolor,
|
||||||
|
gv_connector_loops,
|
||||||
|
gv_edge_mate,
|
||||||
|
gv_edge_wire,
|
||||||
|
gv_node_component,
|
||||||
|
parse_arrow_str,
|
||||||
|
set_dot_basics,
|
||||||
|
)
|
||||||
|
from wireviz.wv_output import (
|
||||||
|
embed_svg_images,
|
||||||
|
embed_svg_images_file,
|
||||||
|
generate_html_output,
|
||||||
|
)
|
||||||
|
from wireviz.wv_utils import bom2tsv, open_file_write
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Harness:
|
||||||
|
metadata: Metadata
|
||||||
|
options: Options
|
||||||
|
tweak: Tweak
|
||||||
|
additional_bom_items: List[AdditionalBomItem] = field(default_factory=list)
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
self.connectors = {}
|
||||||
|
self.cables = {}
|
||||||
|
self.mates = []
|
||||||
|
self.bom = defaultdict(dict)
|
||||||
|
self.additional_bom_items = []
|
||||||
|
|
||||||
|
def add_connector(self, designator: str, *args, **kwargs) -> None:
|
||||||
|
conn = Connector(designator=designator, *args, **kwargs)
|
||||||
|
self.connectors[designator] = conn
|
||||||
|
|
||||||
|
def add_cable(self, designator: str, *args, **kwargs) -> None:
|
||||||
|
cbl = Cable(designator=designator, *args, **kwargs)
|
||||||
|
self.cables[designator] = cbl
|
||||||
|
|
||||||
|
def add_additional_bom_item(self, item: dict) -> None:
|
||||||
|
new_item = AdditionalBomItem(**item)
|
||||||
|
self.additional_bom_items.append(new_item)
|
||||||
|
|
||||||
|
def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None:
|
||||||
|
from_con = self.connectors[from_name]
|
||||||
|
from_pin_obj = from_con.pin_objects[from_pin]
|
||||||
|
to_con = self.connectors[to_name]
|
||||||
|
to_pin_obj = to_con.pin_objects[to_pin]
|
||||||
|
arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE)
|
||||||
|
|
||||||
|
self.mates.append(MatePin(from_pin_obj, to_pin_obj, arrow))
|
||||||
|
self.connectors[from_name].activate_pin(
|
||||||
|
from_pin, Side.RIGHT, is_connection=False
|
||||||
|
)
|
||||||
|
self.connectors[to_name].activate_pin(to_pin, Side.LEFT, is_connection=False)
|
||||||
|
|
||||||
|
def add_mate_component(self, from_name, to_name, arrow_str) -> None:
|
||||||
|
arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE)
|
||||||
|
self.mates.append(MateComponent(from_name, to_name, arrow))
|
||||||
|
|
||||||
|
def populate_bom(self): # called once harness creation is complete
|
||||||
|
# helper lists
|
||||||
|
all_toplevel_items = (
|
||||||
|
list(self.connectors.values())
|
||||||
|
+ list(self.cables.values())
|
||||||
|
+ self.additional_bom_items
|
||||||
|
)
|
||||||
|
all_subitems = [
|
||||||
|
subitem
|
||||||
|
for item in all_toplevel_items
|
||||||
|
for subitem in item.additional_components
|
||||||
|
]
|
||||||
|
all_bom_relevant_items = (
|
||||||
|
list(self.connectors.values())
|
||||||
|
+ [cable for cable in self.cables.values() if cable.category != "bundle"]
|
||||||
|
+ [
|
||||||
|
wire
|
||||||
|
for cable in self.cables.values()
|
||||||
|
if cable.category == "bundle"
|
||||||
|
for wire in cable.wire_objects.values()
|
||||||
|
]
|
||||||
|
+ all_subitems
|
||||||
|
)
|
||||||
|
|
||||||
|
# add items to BOM
|
||||||
|
for item in all_toplevel_items:
|
||||||
|
self._add_to_internal_bom(item) # nested subitems are also handled
|
||||||
|
# sort BOM by category first, then alphabetically by description within category
|
||||||
|
self.bom = dict(
|
||||||
|
sorted(
|
||||||
|
self.bom.items(),
|
||||||
|
key=lambda x: (
|
||||||
|
x[1]["category"],
|
||||||
|
x[0].description,
|
||||||
|
), # x[0] = key, x[1] = value
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# assign BOM IDs
|
||||||
|
for id, key in enumerate(self.bom.keys(), 1):
|
||||||
|
self.bom[key]["id"] = id
|
||||||
|
# set BOM IDs within components (for BOM bubbles)
|
||||||
|
for item in all_bom_relevant_items:
|
||||||
|
if item.ignore_in_bom:
|
||||||
|
continue
|
||||||
|
if not item.bom_hash in self.bom:
|
||||||
|
print(f"{item}'s hash' not found in BOM dict.") # Should not happen
|
||||||
|
continue
|
||||||
|
item.bom_id = self.bom[item.bom_hash]["id"]
|
||||||
|
|
||||||
|
def _add_to_internal_bom(self, item: Component):
|
||||||
|
if item.ignore_in_bom:
|
||||||
|
return
|
||||||
|
|
||||||
|
def _add(hash, qty, designator=None, category=None):
|
||||||
|
bom_entry = self.bom[hash]
|
||||||
|
# initialize missing fields
|
||||||
|
if not "qty" in bom_entry:
|
||||||
|
bom_entry["qty"] = 0
|
||||||
|
if not "designators" in bom_entry:
|
||||||
|
bom_entry["designators"] = set()
|
||||||
|
# update fields
|
||||||
|
bom_entry["qty"] += qty
|
||||||
|
if designator is None:
|
||||||
|
designator_list = []
|
||||||
|
elif isinstance(designator, list):
|
||||||
|
designator_list = designator
|
||||||
|
else:
|
||||||
|
designator_list = [designator]
|
||||||
|
for des in designator_list:
|
||||||
|
if des and not des.startswith(AUTOGENERATED_PREFIX):
|
||||||
|
bom_entry["designators"].add(des)
|
||||||
|
bom_entry["category"] = category
|
||||||
|
|
||||||
|
if isinstance(item, TopLevelGraphicalComponent):
|
||||||
|
if isinstance(item, Connector):
|
||||||
|
cat = BomCategory.CONNECTOR
|
||||||
|
elif isinstance(item, Cable):
|
||||||
|
if item.category == "bundle":
|
||||||
|
cat = BomCategory.WIRE
|
||||||
|
else:
|
||||||
|
cat = BomCategory.CABLE
|
||||||
|
else:
|
||||||
|
cat = ""
|
||||||
|
|
||||||
|
if item.category == "bundle":
|
||||||
|
# wires of a bundle are added as individual BOM entries
|
||||||
|
for subitem in item.wire_objects.values():
|
||||||
|
_add(
|
||||||
|
hash=subitem.bom_hash,
|
||||||
|
qty=item.qty, # should be 1
|
||||||
|
designator=item.designator, # inherit from parent item
|
||||||
|
category=cat,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
_add(
|
||||||
|
hash=item.bom_hash,
|
||||||
|
qty=item.qty, # should be 1
|
||||||
|
designator=item.designator,
|
||||||
|
category=cat,
|
||||||
|
)
|
||||||
|
|
||||||
|
if item.additional_components:
|
||||||
|
item.compute_qty_multipliers()
|
||||||
|
|
||||||
|
for comp in item.additional_components:
|
||||||
|
if comp.ignore_in_bom:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if comp.sum_amounts_in_bom:
|
||||||
|
if comp.amount_computed:
|
||||||
|
total_qty = comp.qty_computed * comp.amount_computed.number
|
||||||
|
else:
|
||||||
|
total_qty = comp.qty_computed
|
||||||
|
else:
|
||||||
|
total_qty = comp.qty_computed
|
||||||
|
_add(
|
||||||
|
hash=comp.bom_hash,
|
||||||
|
designator=item.designator,
|
||||||
|
qty=total_qty,
|
||||||
|
# no explicit qty specified; assume qty = 1
|
||||||
|
# used to simplify add.comp. table within parent node
|
||||||
|
# e.g. show "10 mm Heatshrink" instead of "1x 10 mm Heatshrink"
|
||||||
|
category=BomCategory.ADDITIONAL_INSIDE,
|
||||||
|
)
|
||||||
|
elif isinstance(item, AdditionalBomItem):
|
||||||
|
cat = BomCategory.ADDITIONAL_OUTSIDE
|
||||||
|
_add(
|
||||||
|
hash=item.bom_hash,
|
||||||
|
qty=item.qty,
|
||||||
|
designator=None,
|
||||||
|
category=cat,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise Exception(f"Unknown type of item:\n{item}")
|
||||||
|
|
||||||
|
def connect(
|
||||||
|
self,
|
||||||
|
from_name: str,
|
||||||
|
from_pin: Union[int, str],
|
||||||
|
via_name: str,
|
||||||
|
via_wire: Union[int, str],
|
||||||
|
to_name: str,
|
||||||
|
to_pin: Union[int, str],
|
||||||
|
) -> None:
|
||||||
|
# check from and to connectors
|
||||||
|
for name, pin in zip([from_name, to_name], [from_pin, to_pin]):
|
||||||
|
if name is not None and name in self.connectors:
|
||||||
|
connector = self.connectors[name]
|
||||||
|
# check if provided name is ambiguous
|
||||||
|
if pin in connector.pins and pin in connector.pinlabels:
|
||||||
|
if connector.pins.index(pin) != connector.pinlabels.index(pin):
|
||||||
|
raise Exception(
|
||||||
|
f"{name}:{pin} is defined both in pinlabels and pins, "
|
||||||
|
"for different pins."
|
||||||
|
)
|
||||||
|
# TODO: Maybe issue a warning if present in both lists
|
||||||
|
# but referencing the same pin?
|
||||||
|
if pin in connector.pinlabels:
|
||||||
|
if connector.pinlabels.count(pin) > 1:
|
||||||
|
raise Exception(f"{name}:{pin} is defined more than once.")
|
||||||
|
index = connector.pinlabels.index(pin)
|
||||||
|
pin = connector.pins[index] # map pin name to pin number
|
||||||
|
if name == from_name:
|
||||||
|
from_pin = pin
|
||||||
|
if name == to_name:
|
||||||
|
to_pin = pin
|
||||||
|
if not pin in connector.pins:
|
||||||
|
raise Exception(f"{name}:{pin} not found.")
|
||||||
|
|
||||||
|
# check via cable
|
||||||
|
if via_name in self.cables:
|
||||||
|
cable = self.cables[via_name]
|
||||||
|
# check if provided name is ambiguous
|
||||||
|
if via_wire in cable.colors and via_wire in cable.wirelabels:
|
||||||
|
if cable.colors.index(via_wire) != cable.wirelabels.index(via_wire):
|
||||||
|
raise Exception(
|
||||||
|
f"{via_name}:{via_wire} is defined both in colors and wirelabels, "
|
||||||
|
"for different wires."
|
||||||
|
)
|
||||||
|
# TODO: Maybe issue a warning if present in both lists
|
||||||
|
# but referencing the same wire?
|
||||||
|
if via_wire in cable.colors:
|
||||||
|
if cable.colors.count(via_wire) > 1:
|
||||||
|
raise Exception(
|
||||||
|
f"{via_name}:{via_wire} is used for more than one wire."
|
||||||
|
)
|
||||||
|
# list index starts at 0, wire IDs start at 1
|
||||||
|
via_wire = cable.colors.index(via_wire) + 1
|
||||||
|
elif via_wire in cable.wirelabels:
|
||||||
|
if cable.wirelabels.count(via_wire) > 1:
|
||||||
|
raise Exception(
|
||||||
|
f"{via_name}:{via_wire} is used for more than one wire."
|
||||||
|
)
|
||||||
|
via_wire = (
|
||||||
|
cable.wirelabels.index(via_wire) + 1
|
||||||
|
) # list index starts at 0, wire IDs start at 1
|
||||||
|
|
||||||
|
# perform the actual connection
|
||||||
|
if from_name is not None:
|
||||||
|
from_con = self.connectors[from_name]
|
||||||
|
from_pin_obj = from_con.pin_objects[from_pin]
|
||||||
|
else:
|
||||||
|
from_pin_obj = None
|
||||||
|
if to_name is not None:
|
||||||
|
to_con = self.connectors[to_name]
|
||||||
|
to_pin_obj = to_con.pin_objects[to_pin]
|
||||||
|
else:
|
||||||
|
to_pin_obj = None
|
||||||
|
|
||||||
|
self.cables[via_name]._connect(from_pin_obj, via_wire, to_pin_obj)
|
||||||
|
if from_name in self.connectors:
|
||||||
|
self.connectors[from_name].activate_pin(from_pin, Side.RIGHT)
|
||||||
|
if to_name in self.connectors:
|
||||||
|
self.connectors[to_name].activate_pin(to_pin, Side.LEFT)
|
||||||
|
|
||||||
|
def create_graph(self) -> Graph:
|
||||||
|
dot = Graph()
|
||||||
|
set_dot_basics(dot, self.options)
|
||||||
|
|
||||||
|
for connector in self.connectors.values():
|
||||||
|
# generate connector node
|
||||||
|
gv_html = gv_node_component(connector)
|
||||||
|
gv_html.update_attribs(
|
||||||
|
bgcolor=calculate_node_bgcolor(connector, self.options)
|
||||||
|
)
|
||||||
|
dot.node(
|
||||||
|
connector.designator,
|
||||||
|
label=f"<\n{gv_html}\n>",
|
||||||
|
shape="box",
|
||||||
|
style="filled",
|
||||||
|
)
|
||||||
|
# generate edges for connector loops
|
||||||
|
if len(connector.loops) > 0:
|
||||||
|
dot.attr("edge", color="#000000")
|
||||||
|
loops = gv_connector_loops(connector)
|
||||||
|
for head, tail in loops:
|
||||||
|
dot.edge(head, tail)
|
||||||
|
|
||||||
|
# determine if there are double- or triple-colored wires in the harness;
|
||||||
|
# if so, pad single-color wires to make all wires of equal thickness
|
||||||
|
wire_is_multicolor = [
|
||||||
|
len(wire.color) > 1
|
||||||
|
for cable in self.cables.values()
|
||||||
|
for wire in cable.wire_objects.values()
|
||||||
|
]
|
||||||
|
if any(wire_is_multicolor):
|
||||||
|
wireviz.wv_colors.padding_amount = 3
|
||||||
|
else:
|
||||||
|
wireviz.wv_colors.padding_amount = 1
|
||||||
|
|
||||||
|
for cable in self.cables.values():
|
||||||
|
# generate cable node
|
||||||
|
# TODO: PN info for bundles (per wire)
|
||||||
|
gv_html = gv_node_component(cable)
|
||||||
|
gv_html.update_attribs(bgcolor=calculate_node_bgcolor(cable, self.options))
|
||||||
|
style = "filled,dashed" if cable.category == "bundle" else "filled"
|
||||||
|
dot.node(
|
||||||
|
cable.designator,
|
||||||
|
label=f"<\n{gv_html}\n>",
|
||||||
|
shape="box",
|
||||||
|
style=style,
|
||||||
|
)
|
||||||
|
|
||||||
|
# generate wire edges between component nodes and cable nodes
|
||||||
|
for connection in cable._connections:
|
||||||
|
color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection)
|
||||||
|
dot.attr("edge", color=color)
|
||||||
|
if not (l1, l2) == (None, None):
|
||||||
|
dot.edge(l1, l2)
|
||||||
|
if not (r1, r2) == (None, None):
|
||||||
|
dot.edge(r1, r2)
|
||||||
|
|
||||||
|
for mate in self.mates:
|
||||||
|
color, dir, code_from, code_to = gv_edge_mate(mate)
|
||||||
|
|
||||||
|
dot.attr("edge", color=color, style="dashed", dir=dir)
|
||||||
|
dot.edge(code_from, code_to)
|
||||||
|
|
||||||
|
apply_dot_tweaks(dot, self.tweak)
|
||||||
|
|
||||||
|
return dot
|
||||||
|
|
||||||
|
# cache for the GraphViz Graph object
|
||||||
|
# do not access directly, use self.graph instead
|
||||||
|
_graph = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def graph(self):
|
||||||
|
if not self._graph: # no cached graph exists, generate one
|
||||||
|
self._graph = self.create_graph()
|
||||||
|
return self._graph # return cached graph
|
||||||
|
|
||||||
|
@property
|
||||||
|
def png(self):
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
|
graph = self.graph
|
||||||
|
data = BytesIO()
|
||||||
|
data.write(graph.pipe(format="png"))
|
||||||
|
data.seek(0)
|
||||||
|
return data.read()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def svg(self):
|
||||||
|
graph = self.graph
|
||||||
|
return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd())
|
||||||
|
|
||||||
|
def output(
|
||||||
|
self,
|
||||||
|
filename: Union[str, Path],
|
||||||
|
view: bool = False,
|
||||||
|
cleanup: bool = True,
|
||||||
|
fmt: tuple = ("html", "png", "svg", "tsv"),
|
||||||
|
) -> None:
|
||||||
|
# graphical output
|
||||||
|
graph = self.graph
|
||||||
|
for f in fmt:
|
||||||
|
if f in ("png", "svg", "html"):
|
||||||
|
if f == "html": # if HTML format is specified,
|
||||||
|
f = "svg" # generate SVG for embedding into HTML
|
||||||
|
# SVG file will be renamed/deleted later
|
||||||
|
_filename = f"{filename}.tmp" if f == "svg" else filename
|
||||||
|
# TODO: prevent rendering SVG twice when both SVG and HTML are specified
|
||||||
|
graph.format = f
|
||||||
|
graph.render(filename=_filename, view=view, cleanup=cleanup)
|
||||||
|
# embed images into SVG output
|
||||||
|
if "svg" in fmt or "html" in fmt:
|
||||||
|
embed_svg_images_file(f"{filename}.tmp.svg")
|
||||||
|
# GraphViz output
|
||||||
|
if "gv" in fmt:
|
||||||
|
graph.save(filename=f"{filename}.gv")
|
||||||
|
# BOM output
|
||||||
|
bomlist = bom_list(self.bom)
|
||||||
|
# bomlist = [[]]
|
||||||
|
if "tsv" in fmt:
|
||||||
|
tsv = bom2tsv(bomlist)
|
||||||
|
open_file_write(f"{filename}.tsv").write(tsv)
|
||||||
|
if "csv" in fmt:
|
||||||
|
# TODO: implement CSV output (preferrably using CSV library)
|
||||||
|
print("CSV output is not yet supported")
|
||||||
|
# HTML output
|
||||||
|
if "html" in fmt:
|
||||||
|
generate_html_output(filename, bomlist, self.metadata, self.options)
|
||||||
|
# PDF output
|
||||||
|
if "pdf" in fmt:
|
||||||
|
# TODO: implement PDF output
|
||||||
|
print("PDF output is not yet supported")
|
||||||
|
# delete SVG if not needed
|
||||||
|
if "html" in fmt and not "svg" in fmt:
|
||||||
|
# SVG file was just needed to generate HTML
|
||||||
|
Path(f"{filename}.tmp.svg").unlink()
|
||||||
|
elif "svg" in fmt:
|
||||||
|
Path(f"{filename}.tmp.svg").replace(f"{filename}.svg")
|
||||||
@ -1,119 +1,125 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import re
|
from collections.abc import Iterable
|
||||||
from pathlib import Path
|
from dataclasses import dataclass, field
|
||||||
from typing import Dict, List, Union
|
from typing import Dict
|
||||||
|
|
||||||
from wireviz import APP_NAME, APP_URL, __version__, wv_colors
|
indent_count = 1
|
||||||
from wireviz.DataClasses import Metadata, Options
|
|
||||||
from wireviz.wv_gv_html import html_line_breaks
|
|
||||||
from wireviz.wv_helper import (
|
|
||||||
flatten2d,
|
|
||||||
open_file_read,
|
|
||||||
open_file_write,
|
|
||||||
smart_file_resolve,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_html_output(
|
class Attribs(Dict):
|
||||||
filename: Union[str, Path],
|
def __repr__(self):
|
||||||
bom_list: List[List[str]],
|
if len(self) == 0:
|
||||||
metadata: Metadata,
|
return ""
|
||||||
options: Options,
|
|
||||||
):
|
|
||||||
|
|
||||||
# load HTML template
|
html = []
|
||||||
templatename = metadata.get("template", {}).get("name")
|
for k, v in self.items():
|
||||||
if templatename:
|
if v is not None:
|
||||||
# if relative path to template was provided, check directory of YAML file first, fall back to built-in template directory
|
html.append(f' {k}="{v}"')
|
||||||
templatefile = smart_file_resolve(
|
# else:
|
||||||
f"{templatename}.html",
|
# html.append(f" {k}")
|
||||||
[Path(filename).parent, Path(__file__).parent / "templates"],
|
return "".join(html)
|
||||||
)
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Tag:
|
||||||
|
contents = None
|
||||||
|
attribs: Attribs = field(default_factory=Attribs)
|
||||||
|
flat: bool = None
|
||||||
|
delete_if_empty: bool = False
|
||||||
|
|
||||||
|
def __init__(self, contents, flat=None, delete_if_empty=False, **kwargs):
|
||||||
|
self.contents = contents
|
||||||
|
self.flat = flat
|
||||||
|
self.delete_if_empty = delete_if_empty
|
||||||
|
self.attribs = Attribs({**kwargs})
|
||||||
|
|
||||||
|
def update_attribs(self, **kwargs):
|
||||||
|
for k, v in kwargs.items():
|
||||||
|
self.attribs[k] = v
|
||||||
|
|
||||||
|
@property
|
||||||
|
def tagname(self):
|
||||||
|
return type(self).__name__.lower()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def auto_flat(self):
|
||||||
|
if self.flat is not None: # user specified
|
||||||
|
return self.flat
|
||||||
|
if not _is_iterable_not_str(self.contents): # catch str, int, float, ...
|
||||||
|
if not isinstance(self.contents, Tag): # avoid recursion
|
||||||
|
return not "\n" in str(self.contents) # flatten if single line
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_empty(self):
|
||||||
|
return self.get_contents(force_flat=True) == ""
|
||||||
|
|
||||||
|
def indent_lines(self, lines, force_flat=False):
|
||||||
|
if self.auto_flat or force_flat:
|
||||||
|
return lines
|
||||||
else:
|
else:
|
||||||
# fall back to built-in simple template if no template was provided
|
indenter = " " * indent_count
|
||||||
templatefile = Path(__file__).parent / "templates/simple.html"
|
return "\n".join(f"{indenter}{line}" for line in lines.split("\n"))
|
||||||
|
|
||||||
html = open_file_read(templatefile).read()
|
def get_contents(self, force_flat=False):
|
||||||
|
separator = "" if self.auto_flat or force_flat else "\n"
|
||||||
# embed SVG diagram
|
if _is_iterable_not_str(self.contents):
|
||||||
with open_file_read(f"{filename}.tmp.svg") as file:
|
return separator.join(
|
||||||
svgdata = re.sub(
|
[
|
||||||
"^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>",
|
self.indent_lines(str(c), force_flat)
|
||||||
"<!-- XML and DOCTYPE declarations from SVG file removed -->",
|
for c in self.contents
|
||||||
file.read(),
|
if c is not None
|
||||||
1,
|
]
|
||||||
)
|
)
|
||||||
|
elif self.contents is None:
|
||||||
|
return ""
|
||||||
|
else: # str, int, float, etc.
|
||||||
|
return self.indent_lines(str(self.contents), force_flat)
|
||||||
|
|
||||||
# generate BOM table
|
def __repr__(self):
|
||||||
bom = flatten2d(bom_list)
|
separator = "" if self.auto_flat else "\n"
|
||||||
|
if self.delete_if_empty and self.is_empty:
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
html = [
|
||||||
|
f"<{self.tagname}{str(self.attribs)}>",
|
||||||
|
f"{self.get_contents()}",
|
||||||
|
f"</{self.tagname}>",
|
||||||
|
]
|
||||||
|
html_joined = separator.join(html)
|
||||||
|
return html_joined
|
||||||
|
|
||||||
# generate BOM header (may be at the top or bottom of the table)
|
|
||||||
bom_header_html = " <tr>\n"
|
|
||||||
for item in bom[0]:
|
|
||||||
th_class = f"bom_col_{item.lower()}"
|
|
||||||
bom_header_html = f'{bom_header_html} <th class="{th_class}">{item}</th>\n'
|
|
||||||
bom_header_html = f"{bom_header_html} </tr>\n"
|
|
||||||
|
|
||||||
# generate BOM contents
|
@dataclass
|
||||||
bom_contents = []
|
class TagSingleton(Tag):
|
||||||
for row in bom[1:]:
|
def __init__(self, **kwargs):
|
||||||
row_html = " <tr>\n"
|
self.attribs = Attribs({**kwargs})
|
||||||
for i, item in enumerate(row):
|
|
||||||
td_class = f"bom_col_{bom[0][i].lower()}"
|
|
||||||
row_html = f'{row_html} <td class="{td_class}">{item}</td>\n'
|
|
||||||
row_html = f"{row_html} </tr>\n"
|
|
||||||
bom_contents.append(row_html)
|
|
||||||
|
|
||||||
bom_html = (
|
def __repr__(self):
|
||||||
'<table class="bom">\n' + bom_header_html + "".join(bom_contents) + "</table>\n"
|
return f"<{self.tagname}{str(self.attribs)} />"
|
||||||
)
|
|
||||||
bom_html_reversed = (
|
|
||||||
'<table class="bom">\n'
|
|
||||||
+ "".join(list(reversed(bom_contents)))
|
|
||||||
+ bom_header_html
|
|
||||||
+ "</table>\n"
|
|
||||||
)
|
|
||||||
|
|
||||||
# prepare simple replacements
|
|
||||||
replacements = {
|
|
||||||
"<!-- %generator% -->": f"{APP_NAME} {__version__} - {APP_URL}",
|
|
||||||
"<!-- %fontname% -->": options.fontname,
|
|
||||||
"<!-- %bgcolor% -->": wv_colors.translate_color(options.bgcolor, "hex"),
|
|
||||||
"<!-- %diagram% -->": svgdata,
|
|
||||||
"<!-- %bom% -->": bom_html,
|
|
||||||
"<!-- %bom_reversed% -->": bom_html_reversed,
|
|
||||||
"<!-- %sheet_current% -->": "1", # TODO: handle multi-page documents
|
|
||||||
"<!-- %sheet_total% -->": "1", # TODO: handle multi-page documents
|
|
||||||
}
|
|
||||||
|
|
||||||
# prepare metadata replacements
|
def _is_iterable_not_str(inp):
|
||||||
if metadata:
|
# str is iterable, but should be treated as not iterable
|
||||||
for item, contents in metadata.items():
|
return isinstance(inp, Iterable) and not isinstance(inp, str)
|
||||||
if isinstance(contents, (str, int, float)):
|
|
||||||
replacements[f"<!-- %{item}% -->"] = html_line_breaks(str(contents))
|
|
||||||
elif isinstance(contents, Dict): # useful for authors, revisions
|
|
||||||
for index, (category, entry) in enumerate(contents.items()):
|
|
||||||
if isinstance(entry, Dict):
|
|
||||||
replacements[f"<!-- %{item}_{index+1}% -->"] = str(category)
|
|
||||||
for entry_key, entry_value in entry.items():
|
|
||||||
replacements[
|
|
||||||
f"<!-- %{item}_{index+1}_{entry_key}% -->"
|
|
||||||
] = html_line_breaks(str(entry_value))
|
|
||||||
|
|
||||||
replacements['"sheetsize_default"'] = '"{}"'.format(
|
|
||||||
metadata.get("template", {}).get("sheetsize", "")
|
|
||||||
)
|
|
||||||
# include quotes so no replacement happens within <style> definition
|
|
||||||
|
|
||||||
# perform replacements
|
@dataclass
|
||||||
# regex replacement adapted from:
|
class Br(TagSingleton):
|
||||||
# https://gist.github.com/bgusach/a967e0587d6e01e889fd1d776c5f3729
|
pass
|
||||||
|
|
||||||
# longer replacements first, just in case
|
|
||||||
replacements_sorted = sorted(replacements, key=len, reverse=True)
|
|
||||||
replacements_escaped = map(re.escape, replacements_sorted)
|
|
||||||
pattern = re.compile("|".join(replacements_escaped))
|
|
||||||
html = pattern.sub(lambda match: replacements[match.group(0)], html)
|
|
||||||
|
|
||||||
open_file_write(f"{filename}.html").write(html)
|
class Img(TagSingleton):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Td(Tag):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Tr(Tag):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Table(Tag):
|
||||||
|
pass
|
||||||
|
|||||||
164
src/wireviz/wv_output.py
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import base64
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict, List, Union
|
||||||
|
|
||||||
|
import wireviz # for doing wireviz.__file__
|
||||||
|
from wireviz import APP_NAME, APP_URL, __version__
|
||||||
|
from wireviz.wv_dataclasses import Metadata, Options
|
||||||
|
from wireviz.wv_utils import (
|
||||||
|
html_line_breaks,
|
||||||
|
open_file_read,
|
||||||
|
open_file_write,
|
||||||
|
smart_file_resolve,
|
||||||
|
)
|
||||||
|
|
||||||
|
mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"}
|
||||||
|
|
||||||
|
|
||||||
|
def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str:
|
||||||
|
images_b64 = {} # cache of base64-encoded images
|
||||||
|
|
||||||
|
def image_tag(pre: str, url: str, post: str) -> str:
|
||||||
|
return f'<image{pre} xlink:href="{url}"{post}>'
|
||||||
|
|
||||||
|
def replace(match: re.Match) -> str:
|
||||||
|
imgurl = match["URL"]
|
||||||
|
if not imgurl in images_b64: # only encode/cache every unique URL once
|
||||||
|
imgurl_abs = (Path(base_path) / imgurl).resolve()
|
||||||
|
image = imgurl_abs.read_bytes()
|
||||||
|
images_b64[imgurl] = base64.b64encode(image).decode("utf-8")
|
||||||
|
return image_tag(
|
||||||
|
match["PRE"] or "",
|
||||||
|
f"data:image/{get_mime_subtype(imgurl)};base64, {images_b64[imgurl]}",
|
||||||
|
match["POST"] or "",
|
||||||
|
)
|
||||||
|
|
||||||
|
pattern = re.compile(
|
||||||
|
image_tag(r"(?P<PRE> [^>]*?)?", r'(?P<URL>[^"]*?)', r"(?P<POST> [^>]*?)?"),
|
||||||
|
re.IGNORECASE,
|
||||||
|
)
|
||||||
|
return pattern.sub(replace, svg_in)
|
||||||
|
|
||||||
|
|
||||||
|
def get_mime_subtype(filename: Union[str, Path]) -> str:
|
||||||
|
mime_subtype = Path(filename).suffix.lstrip(".").lower()
|
||||||
|
if mime_subtype in mime_subtype_replacements:
|
||||||
|
mime_subtype = mime_subtype_replacements[mime_subtype]
|
||||||
|
return mime_subtype
|
||||||
|
|
||||||
|
|
||||||
|
def embed_svg_images_file(
|
||||||
|
filename_in: Union[str, Path], overwrite: bool = True
|
||||||
|
) -> None:
|
||||||
|
filename_in = Path(filename_in).resolve()
|
||||||
|
filename_out = filename_in.with_suffix(".b64.svg")
|
||||||
|
filename_out.write_text(
|
||||||
|
embed_svg_images(filename_in.read_text(), filename_in.parent)
|
||||||
|
)
|
||||||
|
if overwrite:
|
||||||
|
filename_out.replace(filename_in)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_html_output(
|
||||||
|
filename: Union[str, Path],
|
||||||
|
bom: List[List[str]],
|
||||||
|
metadata: Metadata,
|
||||||
|
options: Options,
|
||||||
|
):
|
||||||
|
# load HTML template
|
||||||
|
templatename = metadata.get("template", {}).get("name")
|
||||||
|
if templatename:
|
||||||
|
# if relative path to template was provided,
|
||||||
|
# check directory of YAML file first, fall back to built-in template directory
|
||||||
|
templatefile = smart_file_resolve(
|
||||||
|
f"{templatename}.html",
|
||||||
|
[Path(filename).parent, Path(__file__).parent / "templates"],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# fall back to built-in simple template if no template was provided
|
||||||
|
templatefile = Path(wireviz.__file__).parent / "templates/simple.html"
|
||||||
|
|
||||||
|
html = open_file_read(templatefile).read()
|
||||||
|
|
||||||
|
# embed SVG diagram
|
||||||
|
with open_file_read(f"{filename}.tmp.svg") as file:
|
||||||
|
svgdata = re.sub(
|
||||||
|
"^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>",
|
||||||
|
"<!-- XML and DOCTYPE declarations from SVG file removed -->",
|
||||||
|
file.read(),
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# generate BOM table
|
||||||
|
# generate BOM header (may be at the top or bottom of the table)
|
||||||
|
bom_header_html = " <tr>\n"
|
||||||
|
for item in bom[0]:
|
||||||
|
th_class = f"bom_col_{item.lower()}"
|
||||||
|
bom_header_html = f'{bom_header_html} <th class="{th_class}">{item}</th>\n'
|
||||||
|
bom_header_html = f"{bom_header_html} </tr>\n"
|
||||||
|
|
||||||
|
# generate BOM contents
|
||||||
|
bom_contents = []
|
||||||
|
for row in bom[1:]:
|
||||||
|
row_html = " <tr>\n"
|
||||||
|
for i, item in enumerate(row):
|
||||||
|
td_class = f"bom_col_{bom[0][i].lower()}"
|
||||||
|
row_html = f'{row_html} <td class="{td_class}">{item if item is not None else ""}</td>\n'
|
||||||
|
row_html = f"{row_html} </tr>\n"
|
||||||
|
bom_contents.append(row_html)
|
||||||
|
|
||||||
|
bom_html = (
|
||||||
|
'<table class="bom">\n' + bom_header_html + "".join(bom_contents) + "</table>\n"
|
||||||
|
)
|
||||||
|
bom_html_reversed = (
|
||||||
|
'<table class="bom">\n'
|
||||||
|
+ "".join(list(reversed(bom_contents)))
|
||||||
|
+ bom_header_html
|
||||||
|
+ "</table>\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
# prepare simple replacements
|
||||||
|
replacements = {
|
||||||
|
"<!-- %generator% -->": f"{APP_NAME} {__version__} - {APP_URL}",
|
||||||
|
"<!-- %fontname% -->": options.fontname,
|
||||||
|
"<!-- %bgcolor% -->": options.bgcolor.html,
|
||||||
|
"<!-- %diagram% -->": svgdata,
|
||||||
|
"<!-- %bom% -->": bom_html,
|
||||||
|
"<!-- %bom_reversed% -->": bom_html_reversed,
|
||||||
|
"<!-- %sheet_current% -->": "1", # TODO: handle multi-page documents
|
||||||
|
"<!-- %sheet_total% -->": "1", # TODO: handle multi-page documents
|
||||||
|
}
|
||||||
|
|
||||||
|
# prepare metadata replacements
|
||||||
|
if metadata:
|
||||||
|
for item, contents in metadata.items():
|
||||||
|
if isinstance(contents, (str, int, float)):
|
||||||
|
replacements[f"<!-- %{item}% -->"] = html_line_breaks(str(contents))
|
||||||
|
elif isinstance(contents, Dict): # useful for authors, revisions
|
||||||
|
for index, (category, entry) in enumerate(contents.items()):
|
||||||
|
if isinstance(entry, Dict):
|
||||||
|
replacements[f"<!-- %{item}_{index+1}% -->"] = str(category)
|
||||||
|
for entry_key, entry_value in entry.items():
|
||||||
|
replacements[
|
||||||
|
f"<!-- %{item}_{index+1}_{entry_key}% -->"
|
||||||
|
] = html_line_breaks(str(entry_value))
|
||||||
|
|
||||||
|
replacements['"sheetsize_default"'] = '"{}"'.format(
|
||||||
|
metadata.get("template", {}).get("sheetsize", "")
|
||||||
|
)
|
||||||
|
# include quotes so no replacement happens within <style> definition
|
||||||
|
|
||||||
|
# perform replacements
|
||||||
|
# regex replacement adapted from:
|
||||||
|
# https://gist.github.com/bgusach/a967e0587d6e01e889fd1d776c5f3729
|
||||||
|
|
||||||
|
# longer replacements first, just in case
|
||||||
|
replacements_sorted = sorted(replacements, key=len, reverse=True)
|
||||||
|
replacements_escaped = map(re.escape, replacements_sorted)
|
||||||
|
pattern = re.compile("|".join(replacements_escaped))
|
||||||
|
html = pattern.sub(lambda match: replacements[match.group(0)], html)
|
||||||
|
|
||||||
|
open_file_write(f"{filename}.html").write(html)
|
||||||
@ -1,8 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
from collections import namedtuple
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List
|
from typing import List, Optional, Union
|
||||||
|
|
||||||
|
NumberAndUnit = namedtuple("NumberAndUnit", "number unit")
|
||||||
|
|
||||||
awg_equiv_table = {
|
awg_equiv_table = {
|
||||||
"0.09": "28",
|
"0.09": "28",
|
||||||
@ -70,9 +73,40 @@ def expand(yaml_data):
|
|||||||
|
|
||||||
|
|
||||||
def get_single_key_and_value(d: dict):
|
def get_single_key_and_value(d: dict):
|
||||||
k = list(d.keys())[0]
|
# used for defining a line in a harness' connection set
|
||||||
v = d[k]
|
# E.g. for the YAML input `- X1: 1`
|
||||||
return (k, v)
|
# this function returns a tuple in the form ("X1", "1")
|
||||||
|
return next(iter(d.items()))
|
||||||
|
|
||||||
|
|
||||||
|
def parse_number_and_unit(
|
||||||
|
inp: Optional[Union[NumberAndUnit, float, int, str]],
|
||||||
|
default_unit: Optional[str] = None,
|
||||||
|
) -> Optional[NumberAndUnit]:
|
||||||
|
if inp is None:
|
||||||
|
return None
|
||||||
|
elif isinstance(inp, NumberAndUnit):
|
||||||
|
return inp
|
||||||
|
elif isinstance(inp, float) or isinstance(inp, int):
|
||||||
|
return NumberAndUnit(inp, default_unit)
|
||||||
|
elif isinstance(inp, str):
|
||||||
|
if " " in inp:
|
||||||
|
num_str, unit = inp.split(" ", 1)
|
||||||
|
else:
|
||||||
|
num_str, unit = inp, default_unit
|
||||||
|
|
||||||
|
try:
|
||||||
|
number = int(num_str)
|
||||||
|
except ValueError: # maybe it is a float?
|
||||||
|
try:
|
||||||
|
number = float(num_str)
|
||||||
|
except ValueError: # neither float nor int
|
||||||
|
raise Exception(
|
||||||
|
f"{inp} is not a valid number and unit.\n"
|
||||||
|
"It must be a number, or a number and unit separated by a space."
|
||||||
|
)
|
||||||
|
|
||||||
|
return NumberAndUnit(number, unit)
|
||||||
|
|
||||||
|
|
||||||
def int2tuple(inp):
|
def int2tuple(inp):
|
||||||
@ -90,16 +124,20 @@ def flatten2d(inp):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def tuplelist2tsv(inp, header=None):
|
def bom2tsv(inp, header=None):
|
||||||
output = ""
|
output = ""
|
||||||
if header is not None:
|
if header is not None:
|
||||||
inp.insert(0, header)
|
inp.insert(0, header)
|
||||||
inp = flatten2d(inp)
|
|
||||||
for row in inp:
|
for row in inp:
|
||||||
|
row = [item if item is not None else "" for item in row]
|
||||||
output = output + "\t".join(str(remove_links(item)) for item in row) + "\n"
|
output = output + "\t".join(str(remove_links(item)) for item in row) + "\n"
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def html_line_breaks(inp):
|
||||||
|
return remove_links(inp).replace("\n", "<br />") if isinstance(inp, str) else inp
|
||||||
|
|
||||||
|
|
||||||
def remove_links(inp):
|
def remove_links(inp):
|
||||||
return (
|
return (
|
||||||
re.sub(r"<[aA] [^>]*>([^<]*)</[aA]>", r"\1", inp)
|
re.sub(r"<[aA] [^>]*>([^<]*)</[aA]>", r"\1", inp)
|
||||||
@ -154,7 +192,7 @@ def aspect_ratio(image_src):
|
|||||||
return 1 # Assume 1:1 when unable to read actual image size
|
return 1 # Assume 1:1 when unable to read actual image size
|
||||||
|
|
||||||
|
|
||||||
def smart_file_resolve(filename: str, possible_paths: (str, List[str])) -> Path:
|
def smart_file_resolve(filename: str, possible_paths: Union[str, List[str]]) -> Path:
|
||||||
if not isinstance(possible_paths, List):
|
if not isinstance(possible_paths, List):
|
||||||
possible_paths = [possible_paths]
|
possible_paths = [possible_paths]
|
||||||
filename = Path(filename)
|
filename = Path(filename)
|
||||||
8
tests/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
*.gv
|
||||||
|
*.html
|
||||||
|
*.png
|
||||||
|
*.svg
|
||||||
|
*.tsv
|
||||||
|
*.csv
|
||||||
|
*.html
|
||||||
|
*.pdf
|
||||||
55
tests/bom/bomqty.yml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
connectors:
|
||||||
|
X1:
|
||||||
|
type: No additional components
|
||||||
|
pincount: 6
|
||||||
|
|
||||||
|
X2:
|
||||||
|
type: Contains additional components
|
||||||
|
pincount: 6
|
||||||
|
additional_components:
|
||||||
|
- type: One, no unit
|
||||||
|
- type: Two kilometers
|
||||||
|
amount: 2 km
|
||||||
|
- type: Takes pincount times seven
|
||||||
|
qty: 7
|
||||||
|
qty_multiplier: pincount
|
||||||
|
- type: Takes 10 mm per populated pin
|
||||||
|
amount: 10 mm
|
||||||
|
qty_multiplier: populated
|
||||||
|
- type: Takes number of connections
|
||||||
|
qty_multiplier: connections
|
||||||
|
|
||||||
|
cables:
|
||||||
|
C1:
|
||||||
|
type: Containts additional components
|
||||||
|
wirecount: 4
|
||||||
|
length: 1.5
|
||||||
|
color_code: DIN
|
||||||
|
additional_components:
|
||||||
|
- type: One
|
||||||
|
- type: Three centimeters
|
||||||
|
amount: 3 cm
|
||||||
|
- type: Takes wirecount times two
|
||||||
|
qty: 2
|
||||||
|
qty_multiplier: wirecount
|
||||||
|
- type: Takes length times three
|
||||||
|
qty: 3
|
||||||
|
# adding amount here should cause error because the length already has a unit
|
||||||
|
qty_multiplier: length
|
||||||
|
- type: Takes total length times three
|
||||||
|
qty: 2
|
||||||
|
# adding amount here should cause error because the length already has a unit
|
||||||
|
qty_multiplier: total_length
|
||||||
|
|
||||||
|
W2:
|
||||||
|
category: bundle
|
||||||
|
wirecount: 2
|
||||||
|
colors: [tomato, skyblue]
|
||||||
|
|
||||||
|
connections:
|
||||||
|
- - X1: [1-3]
|
||||||
|
- C1: [1-3]
|
||||||
|
- X2: [1-3]
|
||||||
|
- - X1: [3, 4]
|
||||||
|
- W2: [1, 2]
|
||||||
|
- X2: [3, 4]
|
||||||
26
tests/rendering/00_minimal.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
connectors:
|
||||||
|
X1:
|
||||||
|
pincount: 4
|
||||||
|
X2:
|
||||||
|
pincount: 4
|
||||||
|
X3:
|
||||||
|
pincount: 2
|
||||||
|
F:
|
||||||
|
style: simple
|
||||||
|
|
||||||
|
cables:
|
||||||
|
C1:
|
||||||
|
wirecount: 4
|
||||||
|
W2:
|
||||||
|
wirecount: 2
|
||||||
|
category: bundle
|
||||||
|
|
||||||
|
connections:
|
||||||
|
-
|
||||||
|
- X1: [1-4]
|
||||||
|
- C1: [1-4]
|
||||||
|
- X2: [1-4]
|
||||||
|
-
|
||||||
|
- X3: [1,2]
|
||||||
|
- W2: [1,2]
|
||||||
|
- F.
|
||||||
32
tests/rendering/01_color_single.yml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
connectors:
|
||||||
|
X1: # shorthand color codes
|
||||||
|
color: BK
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [RD, YE, GN, BU]
|
||||||
|
X2: # HTML color codes
|
||||||
|
color: 0xFFFFFF
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [0xFF8000, 0x00FF80, 0x8000FF] # no color for last pin
|
||||||
|
X3: # HTML color names
|
||||||
|
color: red
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [deeppink, tomato, salmon, indianred]
|
||||||
|
F:
|
||||||
|
style: simple
|
||||||
|
color: BN
|
||||||
|
|
||||||
|
cables:
|
||||||
|
C1:
|
||||||
|
wirecount: 4
|
||||||
|
color: GY
|
||||||
|
colors: [OG, OL, LB, PK]
|
||||||
|
|
||||||
|
connections:
|
||||||
|
-
|
||||||
|
- X1: [1-4]
|
||||||
|
- C1: [1-4]
|
||||||
|
- X2: [1-4]
|
||||||
|
- <--
|
||||||
|
- X3: [1-4]
|
||||||
|
- --
|
||||||
|
- F.
|
||||||
35
tests/rendering/02_color_multi.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
connectors:
|
||||||
|
X1:
|
||||||
|
color: YEGN
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [WHBK, BKWH, GNYE, GNWHRD]
|
||||||
|
X2:
|
||||||
|
color: 0xCCCCCC:0x333333
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [0xFF8000:0x80FF00, 0x00FF80, 0x8000FF]
|
||||||
|
X3:
|
||||||
|
color: red:yellow
|
||||||
|
pincount: 4
|
||||||
|
pincolors: [deeppink, tomato, salmon, indianred]
|
||||||
|
F:
|
||||||
|
style: simple
|
||||||
|
color: IVTQ
|
||||||
|
|
||||||
|
cables:
|
||||||
|
C1:
|
||||||
|
wirecount: 4
|
||||||
|
color: GDSR
|
||||||
|
colors: [RDYE, YEGN, GNBU, BURD]
|
||||||
|
C2:
|
||||||
|
wirecount: 4
|
||||||
|
colors: [0xFF8000:0x80FF00, YEGN, GNBU, BURD]
|
||||||
|
|
||||||
|
connections:
|
||||||
|
-
|
||||||
|
- X1: [1-4]
|
||||||
|
- C1: [1-4]
|
||||||
|
- X2: [1-4]
|
||||||
|
- C2: [1-4]
|
||||||
|
- X3: [1-4]
|
||||||
|
- --
|
||||||
|
- F.
|
||||||
51
tests/rendering/03_bgcolors.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
options:
|
||||||
|
bgcolor_connector: 0xFFCCCC
|
||||||
|
bgcolor_cable: 0xCCFFCC
|
||||||
|
bgcolor_bundle: 0xCCCCFF
|
||||||
|
|
||||||
|
|
||||||
|
connectors:
|
||||||
|
X1:
|
||||||
|
pincount: 4
|
||||||
|
bgcolor: 0xFF9999
|
||||||
|
bgcolor_title: 0xFF6666
|
||||||
|
X2:
|
||||||
|
pincount: 4
|
||||||
|
X3:
|
||||||
|
pincount: 4
|
||||||
|
color: GN
|
||||||
|
X:
|
||||||
|
pincount: 2
|
||||||
|
F:
|
||||||
|
style: simple
|
||||||
|
|
||||||
|
cables:
|
||||||
|
C1:
|
||||||
|
wirecount: 4
|
||||||
|
bgcolor: 0x99FF99
|
||||||
|
bgcolor_title: 0x66FF66
|
||||||
|
C2:
|
||||||
|
wirecount: 4
|
||||||
|
color: PK
|
||||||
|
W1:
|
||||||
|
wirecount: 2
|
||||||
|
category: bundle
|
||||||
|
W2:
|
||||||
|
wirecount: 2
|
||||||
|
category: bundle
|
||||||
|
bgcolor: 0x9999FF
|
||||||
|
bgcolor_title: 0x6666FF
|
||||||
|
|
||||||
|
connections:
|
||||||
|
-
|
||||||
|
- X1: [1-4]
|
||||||
|
- C1: [1-4]
|
||||||
|
- X2: [1-4]
|
||||||
|
- C2: [1-4]
|
||||||
|
- X3: [1-4]
|
||||||
|
-
|
||||||
|
- X.X4: [1,2]
|
||||||
|
- W1: [1,2]
|
||||||
|
- X.X5: [1,2]
|
||||||
|
- W2: [1,2]
|
||||||
|
- F.
|
||||||
@ -189,7 +189,6 @@ connectors:
|
|||||||
subtype: female
|
subtype: female
|
||||||
F1:
|
F1:
|
||||||
style: simple
|
style: simple
|
||||||
autogenerate: true
|
|
||||||
type: Crimp ferrule
|
type: Crimp ferrule
|
||||||
subtype: 0.5 mm²
|
subtype: 0.5 mm²
|
||||||
color: OG # optional color
|
color: OG # optional color
|
||||||
@ -203,7 +202,7 @@ cables:
|
|||||||
|
|
||||||
connections:
|
connections:
|
||||||
-
|
-
|
||||||
- F1 # a new ferrule is auto-generated for each of the four wires
|
- F1. # a new ferrule is auto-generated for each of the four wires
|
||||||
- W1: [1-4]
|
- W1: [1-4]
|
||||||
- X1: [1-4]
|
- X1: [1-4]
|
||||||
```
|
```
|
||||||
@ -228,13 +227,11 @@ connectors:
|
|||||||
subtype: female
|
subtype: female
|
||||||
F_10: # this is a unique ferrule
|
F_10: # this is a unique ferrule
|
||||||
style: simple
|
style: simple
|
||||||
show_name: false # non-autogenerated connectors show their name by default; override
|
|
||||||
type: Crimp ferrule
|
type: Crimp ferrule
|
||||||
subtype: 1.0 mm²
|
subtype: 1.0 mm²
|
||||||
color: YE # optional color
|
color: YE # optional color
|
||||||
F_05: # this is a ferrule that will be auto-generated on demand
|
F_05: # this is a ferrule that will be auto-generated on demand
|
||||||
style: simple
|
style: simple
|
||||||
autogenerate: true
|
|
||||||
type: Crimp ferrule
|
type: Crimp ferrule
|
||||||
subtype: 0.5 mm²
|
subtype: 0.5 mm²
|
||||||
color: OG
|
color: OG
|
||||||
@ -248,7 +245,7 @@ cables:
|
|||||||
|
|
||||||
connections:
|
connections:
|
||||||
-
|
-
|
||||||
- [F_05, F_10, F_10, F_05]
|
- [F_05., F_10.F1, F_10.F1, F_05.]
|
||||||
- W1: [1-4]
|
- W1: [1-4]
|
||||||
- X1: [1-4]
|
- X1: [1-4]
|
||||||
```
|
```
|
||||||
|
|||||||
73
tutorial/tutorial01.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial01</title>
|
<title>tutorial01</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial01</h1>
|
<h1>tutorial01</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="489pt" height="192pt"
|
<svg width="489pt" height="192pt"
|
||||||
@ -143,28 +166,40 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 4 wires</td>
|
<td class="bom_col_description">Cable, 4 wires</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, 4 pins</td>
|
<td class="bom_col_description">Connector, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2</td>
|
<td class="bom_col_designators">X1, X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
tutorial/tutorial01.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="489pt" height="192pt"
|
<svg width="489pt" height="192pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
73
tutorial/tutorial02.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial02</title>
|
<title>tutorial02</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial02</h1>
|
<h1>tutorial02</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="857pt" height="192pt"
|
<svg width="857pt" height="192pt"
|
||||||
@ -153,28 +176,40 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 4 x 0.25 mm²</td>
|
<td class="bom_col_description">Cable, 4 x 0.25 mm²</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2</td>
|
<td class="bom_col_designators">X1, X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
tutorial/tutorial02.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="857pt" height="192pt"
|
<svg width="857pt" height="192pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
73
tutorial/tutorial03.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial03</title>
|
<title>tutorial03</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial03</h1>
|
<h1>tutorial03</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="887pt" height="232pt"
|
<svg width="887pt" height="232pt"
|
||||||
@ -180,28 +203,40 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 4 x 0.25 mm² shielded</td>
|
<td class="bom_col_description">Cable, 4 x 0.25 mm² shielded</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2</td>
|
<td class="bom_col_designators">X1, X2</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
tutorial/tutorial03.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="887pt" height="232pt"
|
<svg width="887pt" height="232pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
83
tutorial/tutorial04.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial04</title>
|
<title>tutorial04</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial04</h1>
|
<h1>tutorial04</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1551pt" height="215pt"
|
<svg width="1551pt" height="215pt"
|
||||||
@ -311,35 +334,47 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Cable, 4 x 24 AWG</td>
|
<td class="bom_col_description">Cable, 4 x 24 AWG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.4</td>
|
<td class="bom_col_qty">0.4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2</td>
|
<td class="bom_col_designators">W1, W2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X2, X3</td>
|
<td class="bom_col_designators">X2, X3</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, male, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, male, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
2
tutorial/tutorial04.svg
generated
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="1551pt" height="215pt"
|
<svg width="1551pt" height="215pt"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
104
tutorial/tutorial05.gv
generated
@ -4,6 +4,54 @@ graph {
|
|||||||
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
|
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]
|
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
|
||||||
edge [fontname=arial style=bold]
|
edge [fontname=arial style=bold]
|
||||||
|
AUTOGENERATED_F1_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F1_2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F1_3 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F1_4 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
X1 [label=<
|
X1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@ -39,66 +87,18 @@ graph {
|
|||||||
</table>
|
</table>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F1_1 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F1_2 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F1_3 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F1_4 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
edge [color="#000000:#ffff00:#000000"]
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
_F1_1:e -- W1:w1:w
|
AUTOGENERATED_F1_1:e -- W1:w1:w
|
||||||
W1:w1:e -- X1:p1l:w
|
W1:w1:e -- X1:p1l:w
|
||||||
edge [color="#000000:#000000:#000000"]
|
edge [color="#000000:#000000:#000000"]
|
||||||
_F1_2:e -- W1:w2:w
|
AUTOGENERATED_F1_2:e -- W1:w2:w
|
||||||
W1:w2:e -- X1:p2l:w
|
W1:w2:e -- X1:p2l:w
|
||||||
edge [color="#000000:#000000:#000000"]
|
edge [color="#000000:#000000:#000000"]
|
||||||
_F1_3:e -- W1:w3:w
|
AUTOGENERATED_F1_3:e -- W1:w3:w
|
||||||
W1:w3:e -- X1:p3l:w
|
W1:w3:e -- X1:p3l:w
|
||||||
edge [color="#000000:#ff0000:#000000"]
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
_F1_4:e -- W1:w4:w
|
AUTOGENERATED_F1_4:e -- W1:w4:w
|
||||||
W1:w4:e -- X1:p4l:w
|
W1:w4:e -- X1:p4l:w
|
||||||
W1 [label=<
|
W1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
|||||||
199
tutorial/tutorial05.html
generated
@ -3,49 +3,43 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial05</title>
|
<title>tutorial05</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial05</h1>
|
<h1>tutorial05</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="793pt" height="215pt"
|
<svg width="793pt" height="215pt"
|
||||||
viewBox="0.00 0.00 793.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 793.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 789,-210.5 789,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 789,-210.5 789,4 -4,4"/>
|
||||||
<!-- X1 -->
|
<!-- AUTOGENERATED_F1_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>AUTOGENERATED_F1_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="785,-174.5 613,-174.5 613,-36.5 785,-36.5 785,-174.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-151.5 613,-174.5 785,-174.5 785,-151.5 613,-151.5"/>
|
|
||||||
<text text-anchor="start" x="690" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-128.5 613,-151.5 694,-151.5 694,-128.5 613,-128.5"/>
|
|
||||||
<text text-anchor="start" x="617" y="-136.3" font-family="arial" font-size="14.00">Molex 8981</text>
|
|
||||||
<polygon fill="none" stroke="black" points="694,-128.5 694,-151.5 745,-151.5 745,-128.5 694,-128.5"/>
|
|
||||||
<text text-anchor="start" x="698" y="-136.3" font-family="arial" font-size="14.00">female</text>
|
|
||||||
<polygon fill="none" stroke="black" points="745,-128.5 745,-151.5 785,-151.5 785,-128.5 745,-128.5"/>
|
|
||||||
<text text-anchor="start" x="749" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-105.5 613,-128.5 686,-128.5 686,-105.5 613,-105.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-105.5 686,-128.5 785,-128.5 785,-105.5 686,-105.5"/>
|
|
||||||
<text text-anchor="start" x="718.5" y="-113.3" font-family="arial" font-size="14.00">+12V</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-82.5 613,-105.5 686,-105.5 686,-82.5 613,-82.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-82.5 686,-105.5 785,-105.5 785,-82.5 686,-82.5"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-90.3" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-59.5 613,-82.5 686,-82.5 686,-59.5 613,-59.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-59.5 686,-82.5 785,-82.5 785,-59.5 686,-59.5"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-67.3" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-36.5 613,-59.5 686,-59.5 686,-36.5 613,-36.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-36.5 686,-59.5 785,-59.5 785,-36.5 686,-36.5"/>
|
|
||||||
<text text-anchor="start" x="722.5" y="-44.3" font-family="arial" font-size="14.00">+5V</text>
|
|
||||||
</g>
|
|
||||||
<!-- _F1_1 -->
|
|
||||||
<g id="node2" class="node">
|
|
||||||
<title>_F1_1</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-164 0,-164 0,-141 187,-141 187,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-164 0,-164 0,-141 187,-141 187,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -91,16 +85,16 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="331,-41.5 331,-43.5 469,-43.5 469,-41.5 331,-41.5"/>
|
<polygon fill="#000000" stroke="transparent" points="331,-41.5 331,-43.5 469,-43.5 469,-41.5 331,-41.5"/>
|
||||||
<text text-anchor="start" x="333" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="333" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_1--W1 -->
|
<!-- AUTOGENERATED_F1_1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_F1_1:e--W1:w</title>
|
<title>AUTOGENERATED_F1_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-150.5C250.79,-151.78 263.47,-118.78 331,-117.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-150.5C250.79,-151.78 263.47,-118.78 331,-117.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-152.5C252.66,-152.5 265.34,-119.5 331,-119.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-152.5C252.66,-152.5 265.34,-119.5 331,-119.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-154.5C254.53,-153.22 267.21,-120.22 331,-121.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-154.5C254.53,-153.22 267.21,-120.22 331,-121.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_2 -->
|
<!-- AUTOGENERATED_F1_2 -->
|
||||||
<g id="node3" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_F1_2</title>
|
<title>AUTOGENERATED_F1_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-117 0,-117 0,-94 187,-94 187,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-117 0,-117 0,-94 187,-94 187,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -111,16 +105,16 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_2--W1 -->
|
<!-- AUTOGENERATED_F1_2--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>_F1_2:e--W1:w</title>
|
<title>AUTOGENERATED_F1_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-103.5C250.04,-103.86 265.66,-92.86 331,-92.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-103.5C250.04,-103.86 265.66,-92.86 331,-92.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105.5C251.19,-105.5 266.81,-94.5 331,-94.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105.5C251.19,-105.5 266.81,-94.5 331,-94.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-107.5C252.34,-107.14 267.96,-96.14 331,-96.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-107.5C252.34,-107.14 267.96,-96.14 331,-96.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_3 -->
|
<!-- AUTOGENERATED_F1_3 -->
|
||||||
<g id="node4" class="node">
|
<g id="node3" class="node">
|
||||||
<title>_F1_3</title>
|
<title>AUTOGENERATED_F1_3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-70 0,-70 0,-47 187,-47 187,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-70 0,-70 0,-47 187,-47 187,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -131,16 +125,16 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_3--W1 -->
|
<!-- AUTOGENERATED_F1_3--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>_F1_3:e--W1:w</title>
|
<title>AUTOGENERATED_F1_3:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-56.5C252.34,-56.86 267.96,-67.86 331,-67.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-56.5C252.34,-56.86 267.96,-67.86 331,-67.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-58.5C251.19,-58.5 266.81,-69.5 331,-69.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-58.5C251.19,-58.5 266.81,-69.5 331,-69.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-60.5C250.04,-60.14 265.66,-71.14 331,-71.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-60.5C250.04,-60.14 265.66,-71.14 331,-71.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_4 -->
|
<!-- AUTOGENERATED_F1_4 -->
|
||||||
<g id="node5" class="node">
|
<g id="node4" class="node">
|
||||||
<title>_F1_4</title>
|
<title>AUTOGENERATED_F1_4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-23 0,-23 0,0 187,0 187,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-23 0,-23 0,0 187,0 187,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -151,13 +145,42 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
<polygon fill="none" stroke="black" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_4--W1 -->
|
<!-- AUTOGENERATED_F1_4--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_F1_4:e--W1:w</title>
|
<title>AUTOGENERATED_F1_4:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-9.5C254.53,-10.78 267.21,-43.78 331,-42.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-9.5C254.53,-10.78 267.21,-43.78 331,-42.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-11.5C252.66,-11.5 265.34,-44.5 331,-44.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-11.5C252.66,-11.5 265.34,-44.5 331,-44.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-13.5C250.79,-12.22 263.47,-45.22 331,-46.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-13.5C250.79,-12.22 263.47,-45.22 331,-46.5"/>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="785,-174.5 613,-174.5 613,-36.5 785,-36.5 785,-174.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-151.5 613,-174.5 785,-174.5 785,-151.5 613,-151.5"/>
|
||||||
|
<text text-anchor="start" x="690" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-128.5 613,-151.5 694,-151.5 694,-128.5 613,-128.5"/>
|
||||||
|
<text text-anchor="start" x="617" y="-136.3" font-family="arial" font-size="14.00">Molex 8981</text>
|
||||||
|
<polygon fill="none" stroke="black" points="694,-128.5 694,-151.5 745,-151.5 745,-128.5 694,-128.5"/>
|
||||||
|
<text text-anchor="start" x="698" y="-136.3" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="745,-128.5 745,-151.5 785,-151.5 785,-128.5 745,-128.5"/>
|
||||||
|
<text text-anchor="start" x="749" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-105.5 613,-128.5 686,-128.5 686,-105.5 613,-105.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-105.5 686,-128.5 785,-128.5 785,-105.5 686,-105.5"/>
|
||||||
|
<text text-anchor="start" x="718.5" y="-113.3" font-family="arial" font-size="14.00">+12V</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-82.5 613,-105.5 686,-105.5 686,-82.5 613,-82.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-82.5 686,-105.5 785,-105.5 785,-82.5 686,-82.5"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-90.3" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-59.5 613,-82.5 686,-82.5 686,-59.5 613,-59.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-59.5 686,-82.5 785,-82.5 785,-59.5 686,-59.5"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-67.3" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-36.5 613,-59.5 686,-59.5 686,-36.5 613,-36.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-36.5 686,-59.5 785,-59.5 785,-36.5 686,-36.5"/>
|
||||||
|
<text text-anchor="start" x="722.5" y="-44.3" font-family="arial" font-size="14.00">+5V</text>
|
||||||
|
</g>
|
||||||
<!-- W1--X1 -->
|
<!-- W1--X1 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--X1:w</title>
|
<title>W1:e--X1:w</title>
|
||||||
@ -188,49 +211,61 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Crimp ferrule, 0.5 mm², OG</td>
|
<td class="bom_col_description">Connector, Crimp ferrule, 0.5 mm², OG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">4</td>
|
<td class="bom_col_qty">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_designators"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex 8981, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex 8981, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², BK</td>
|
<td class="bom_col_description">Wire, 0.5 mm², BK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², RD</td>
|
<td class="bom_col_description">Wire, 0.5 mm², RD</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.5 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
98
tutorial/tutorial05.svg
generated
@ -1,45 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="793pt" height="215pt"
|
<svg width="793pt" height="215pt"
|
||||||
viewBox="0.00 0.00 793.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 793.00 214.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 210.5)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 789,-210.5 789,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-210.5 789,-210.5 789,4 -4,4"/>
|
||||||
<!-- X1 -->
|
<!-- AUTOGENERATED_F1_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>AUTOGENERATED_F1_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="785,-174.5 613,-174.5 613,-36.5 785,-36.5 785,-174.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-151.5 613,-174.5 785,-174.5 785,-151.5 613,-151.5"/>
|
|
||||||
<text text-anchor="start" x="690" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-128.5 613,-151.5 694,-151.5 694,-128.5 613,-128.5"/>
|
|
||||||
<text text-anchor="start" x="617" y="-136.3" font-family="arial" font-size="14.00">Molex 8981</text>
|
|
||||||
<polygon fill="none" stroke="black" points="694,-128.5 694,-151.5 745,-151.5 745,-128.5 694,-128.5"/>
|
|
||||||
<text text-anchor="start" x="698" y="-136.3" font-family="arial" font-size="14.00">female</text>
|
|
||||||
<polygon fill="none" stroke="black" points="745,-128.5 745,-151.5 785,-151.5 785,-128.5 745,-128.5"/>
|
|
||||||
<text text-anchor="start" x="749" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-105.5 613,-128.5 686,-128.5 686,-105.5 613,-105.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-105.5 686,-128.5 785,-128.5 785,-105.5 686,-105.5"/>
|
|
||||||
<text text-anchor="start" x="718.5" y="-113.3" font-family="arial" font-size="14.00">+12V</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-82.5 613,-105.5 686,-105.5 686,-82.5 613,-82.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-82.5 686,-105.5 785,-105.5 785,-82.5 686,-82.5"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-90.3" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-59.5 613,-82.5 686,-82.5 686,-59.5 613,-59.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-59.5 686,-82.5 785,-82.5 785,-59.5 686,-59.5"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-67.3" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-36.5 613,-59.5 686,-59.5 686,-36.5 613,-36.5"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-36.5 686,-59.5 785,-59.5 785,-36.5 686,-36.5"/>
|
|
||||||
<text text-anchor="start" x="722.5" y="-44.3" font-family="arial" font-size="14.00">+5V</text>
|
|
||||||
</g>
|
|
||||||
<!-- _F1_1 -->
|
|
||||||
<g id="node2" class="node">
|
|
||||||
<title>_F1_1</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-164 0,-164 0,-141 187,-141 187,-164"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-164 0,-164 0,-141 187,-141 187,-164"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-140.5 0.5,-163.5 89.5,-163.5 89.5,-140.5 0.5,-140.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-148.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -85,16 +56,16 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="331,-41.5 331,-43.5 469,-43.5 469,-41.5 331,-41.5"/>
|
<polygon fill="#000000" stroke="transparent" points="331,-41.5 331,-43.5 469,-43.5 469,-41.5 331,-41.5"/>
|
||||||
<text text-anchor="start" x="333" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="333" y="-28.3" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_1--W1 -->
|
<!-- AUTOGENERATED_F1_1--W1 -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_F1_1:e--W1:w</title>
|
<title>AUTOGENERATED_F1_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-150.5C250.79,-151.78 263.47,-118.78 331,-117.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-150.5C250.79,-151.78 263.47,-118.78 331,-117.5"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-152.5C252.66,-152.5 265.34,-119.5 331,-119.5"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-152.5C252.66,-152.5 265.34,-119.5 331,-119.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-154.5C254.53,-153.22 267.21,-120.22 331,-121.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-154.5C254.53,-153.22 267.21,-120.22 331,-121.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_2 -->
|
<!-- AUTOGENERATED_F1_2 -->
|
||||||
<g id="node3" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_F1_2</title>
|
<title>AUTOGENERATED_F1_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-117 0,-117 0,-94 187,-94 187,-117"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-117 0,-117 0,-94 187,-94 187,-117"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-93.5 0.5,-116.5 89.5,-116.5 89.5,-93.5 0.5,-93.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-101.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -105,16 +76,16 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
<polygon fill="none" stroke="black" points="179.5,-93.5 179.5,-116.5 187.5,-116.5 187.5,-93.5 179.5,-93.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_2--W1 -->
|
<!-- AUTOGENERATED_F1_2--W1 -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>_F1_2:e--W1:w</title>
|
<title>AUTOGENERATED_F1_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-103.5C250.04,-103.86 265.66,-92.86 331,-92.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-103.5C250.04,-103.86 265.66,-92.86 331,-92.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105.5C251.19,-105.5 266.81,-94.5 331,-94.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105.5C251.19,-105.5 266.81,-94.5 331,-94.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-107.5C252.34,-107.14 267.96,-96.14 331,-96.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-107.5C252.34,-107.14 267.96,-96.14 331,-96.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_3 -->
|
<!-- AUTOGENERATED_F1_3 -->
|
||||||
<g id="node4" class="node">
|
<g id="node3" class="node">
|
||||||
<title>_F1_3</title>
|
<title>AUTOGENERATED_F1_3</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-70 0,-70 0,-47 187,-47 187,-70"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-70 0,-70 0,-47 187,-47 187,-70"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="0.5,-46.5 0.5,-69.5 89.5,-69.5 89.5,-46.5 0.5,-46.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-54.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -125,16 +96,16 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
<polygon fill="none" stroke="black" points="179.5,-46.5 179.5,-69.5 187.5,-69.5 187.5,-46.5 179.5,-46.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_3--W1 -->
|
<!-- AUTOGENERATED_F1_3--W1 -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>_F1_3:e--W1:w</title>
|
<title>AUTOGENERATED_F1_3:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-56.5C252.34,-56.86 267.96,-67.86 331,-67.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-56.5C252.34,-56.86 267.96,-67.86 331,-67.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-58.5C251.19,-58.5 266.81,-69.5 331,-69.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-58.5C251.19,-58.5 266.81,-69.5 331,-69.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-60.5C250.04,-60.14 265.66,-71.14 331,-71.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-60.5C250.04,-60.14 265.66,-71.14 331,-71.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_4 -->
|
<!-- AUTOGENERATED_F1_4 -->
|
||||||
<g id="node5" class="node">
|
<g id="node4" class="node">
|
||||||
<title>_F1_4</title>
|
<title>AUTOGENERATED_F1_4</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-23 0,-23 0,0 187,0 187,-23"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-23 0,-23 0,0 187,0 187,-23"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
<polygon fill="none" stroke="black" points="0.5,0.5 0.5,-22.5 89.5,-22.5 89.5,0.5 0.5,0.5"/>
|
||||||
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-7.3" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -145,13 +116,42 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
<polygon fill="none" stroke="black" points="179.5,0.5 179.5,-22.5 187.5,-22.5 187.5,0.5 179.5,0.5"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F1_4--W1 -->
|
<!-- AUTOGENERATED_F1_4--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_F1_4:e--W1:w</title>
|
<title>AUTOGENERATED_F1_4:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-9.5C254.53,-10.78 267.21,-43.78 331,-42.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-9.5C254.53,-10.78 267.21,-43.78 331,-42.5"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-11.5C252.66,-11.5 265.34,-44.5 331,-44.5"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-11.5C252.66,-11.5 265.34,-44.5 331,-44.5"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-13.5C250.79,-12.22 263.47,-45.22 331,-46.5"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-13.5C250.79,-12.22 263.47,-45.22 331,-46.5"/>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="785,-174.5 613,-174.5 613,-36.5 785,-36.5 785,-174.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-151.5 613,-174.5 785,-174.5 785,-151.5 613,-151.5"/>
|
||||||
|
<text text-anchor="start" x="690" y="-159.3" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-128.5 613,-151.5 694,-151.5 694,-128.5 613,-128.5"/>
|
||||||
|
<text text-anchor="start" x="617" y="-136.3" font-family="arial" font-size="14.00">Molex 8981</text>
|
||||||
|
<polygon fill="none" stroke="black" points="694,-128.5 694,-151.5 745,-151.5 745,-128.5 694,-128.5"/>
|
||||||
|
<text text-anchor="start" x="698" y="-136.3" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="745,-128.5 745,-151.5 785,-151.5 785,-128.5 745,-128.5"/>
|
||||||
|
<text text-anchor="start" x="749" y="-136.3" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-105.5 613,-128.5 686,-128.5 686,-105.5 613,-105.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-113.3" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-105.5 686,-128.5 785,-128.5 785,-105.5 686,-105.5"/>
|
||||||
|
<text text-anchor="start" x="718.5" y="-113.3" font-family="arial" font-size="14.00">+12V</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-82.5 613,-105.5 686,-105.5 686,-82.5 613,-82.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-90.3" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-82.5 686,-105.5 785,-105.5 785,-82.5 686,-82.5"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-90.3" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-59.5 613,-82.5 686,-82.5 686,-59.5 613,-59.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-67.3" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-59.5 686,-82.5 785,-82.5 785,-59.5 686,-59.5"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-67.3" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-36.5 613,-59.5 686,-59.5 686,-36.5 613,-36.5"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-44.3" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-36.5 686,-59.5 785,-59.5 785,-36.5 686,-36.5"/>
|
||||||
|
<text text-anchor="start" x="722.5" y="-44.3" font-family="arial" font-size="14.00">+5V</text>
|
||||||
|
</g>
|
||||||
<!-- W1--X1 -->
|
<!-- W1--X1 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--X1:w</title>
|
<title>W1:e--X1:w</title>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
80
tutorial/tutorial06.gv
generated
@ -4,6 +4,42 @@ graph {
|
|||||||
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
|
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]
|
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
|
||||||
edge [fontname=arial style=bold]
|
edge [fontname=arial style=bold]
|
||||||
|
AUTOGENERATED_F_05_1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
F1 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">1.0 mm²</td>
|
||||||
|
<td balign="left">YE</td>
|
||||||
|
<td balign="left" bgcolor="#FFFF00" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
|
AUTOGENERATED_F_05_2 [label=<
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
||||||
|
<td balign="left">Crimp ferrule</td>
|
||||||
|
<td balign="left">0.5 mm²</td>
|
||||||
|
<td balign="left">OG</td>
|
||||||
|
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
X1 [label=<
|
X1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@ -39,54 +75,18 @@ graph {
|
|||||||
</table>
|
</table>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
F_10 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">1.0 mm²</td>
|
|
||||||
<td balign="left">YE</td>
|
|
||||||
<td balign="left" bgcolor="#FFFF00" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F_05_1 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
|
||||||
_F_05_2 [label=<
|
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td>
|
|
||||||
<table border="0" cellspacing="0" cellpadding="3" cellborder="1"><tr>
|
|
||||||
<td balign="left">Crimp ferrule</td>
|
|
||||||
<td balign="left">0.5 mm²</td>
|
|
||||||
<td balign="left">OG</td>
|
|
||||||
<td balign="left" bgcolor="#FF8000" width="4"></td>
|
|
||||||
</tr></table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
> fillcolor="#FFFFFF" shape=box style=filled]
|
> fillcolor="#FFFFFF" shape=box style=filled]
|
||||||
edge [color="#000000:#ffff00:#000000"]
|
edge [color="#000000:#ffff00:#000000"]
|
||||||
_F_05_1:e -- W1:w1:w
|
AUTOGENERATED_F_05_1:e -- W1:w1:w
|
||||||
W1:w1:e -- X1:p1l:w
|
W1:w1:e -- X1:p1l:w
|
||||||
edge [color="#000000:#000000:#000000"]
|
edge [color="#000000:#000000:#000000"]
|
||||||
F_10:e -- W1:w2:w
|
F1:e -- W1:w2:w
|
||||||
W1:w2:e -- X1:p2l:w
|
W1:w2:e -- X1:p2l:w
|
||||||
edge [color="#000000:#000000:#000000"]
|
edge [color="#000000:#000000:#000000"]
|
||||||
F_10:e -- W1:w3:w
|
F1:e -- W1:w3:w
|
||||||
W1:w3:e -- X1:p3l:w
|
W1:w3:e -- X1:p3l:w
|
||||||
edge [color="#000000:#ff0000:#000000"]
|
edge [color="#000000:#ff0000:#000000"]
|
||||||
_F_05_2:e -- W1:w4:w
|
AUTOGENERATED_F_05_2:e -- W1:w4:w
|
||||||
W1:w4:e -- X1:p4l:w
|
W1:w4:e -- X1:p4l:w
|
||||||
W1 [label=<
|
W1 [label=<
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
|||||||
261
tutorial/tutorial06.html
generated
@ -3,58 +3,52 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial06</title>
|
<title>tutorial06</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial06</h1>
|
<h1>tutorial06</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="793pt" height="192pt"
|
<svg width="793pt" height="192pt"
|
||||||
viewBox="0.00 0.00 793.00 192.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 793.00 192.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 188)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 188)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-188 789,-188 789,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-188 789,-188 789,4 -4,4"/>
|
||||||
<!-- X1 -->
|
<!-- AUTOGENERATED_F_05_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>AUTOGENERATED_F_05_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="785,-152 613,-152 613,-14 785,-14 785,-152"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-118.5 0,-118.5 0,-95.5 187,-95.5 187,-118.5"/>
|
||||||
<polygon fill="none" stroke="black" points="613,-129 613,-152 785,-152 785,-129 613,-129"/>
|
<polygon fill="none" stroke="black" points="0.5,-95 0.5,-118 89.5,-118 89.5,-95 0.5,-95"/>
|
||||||
<text text-anchor="start" x="690" y="-136.8" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="4.5" y="-102.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="613,-106 613,-129 694,-129 694,-106 613,-106"/>
|
<polygon fill="none" stroke="black" points="89.5,-95 89.5,-118 149.5,-118 149.5,-95 89.5,-95"/>
|
||||||
<text text-anchor="start" x="617" y="-113.8" font-family="arial" font-size="14.00">Molex 8981</text>
|
<text text-anchor="start" x="93.5" y="-102.8" font-family="arial" font-size="14.00">0.5 mm²</text>
|
||||||
<polygon fill="none" stroke="black" points="694,-106 694,-129 745,-129 745,-106 694,-106"/>
|
<polygon fill="none" stroke="black" points="149.5,-95 149.5,-118 179.5,-118 179.5,-95 149.5,-95"/>
|
||||||
<text text-anchor="start" x="698" y="-113.8" font-family="arial" font-size="14.00">female</text>
|
<text text-anchor="start" x="153.5" y="-102.8" font-family="arial" font-size="14.00">OG</text>
|
||||||
<polygon fill="none" stroke="black" points="745,-106 745,-129 785,-129 785,-106 745,-106"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
||||||
<text text-anchor="start" x="749" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
<polygon fill="none" stroke="black" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
||||||
<polygon fill="none" stroke="black" points="613,-83 613,-106 686,-106 686,-83 613,-83"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-83 686,-106 785,-106 785,-83 686,-83"/>
|
|
||||||
<text text-anchor="start" x="718.5" y="-90.8" font-family="arial" font-size="14.00">+12V</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-60 613,-83 686,-83 686,-60 613,-60"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-60 686,-83 785,-83 785,-60 686,-60"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-67.8" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-37 613,-60 686,-60 686,-37 613,-37"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-37 686,-60 785,-60 785,-37 686,-37"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-44.8" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-14 613,-37 686,-37 686,-14 613,-14"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-14 686,-37 785,-37 785,-14 686,-14"/>
|
|
||||||
<text text-anchor="start" x="722.5" y="-21.8" font-family="arial" font-size="14.00">+5V</text>
|
|
||||||
</g>
|
|
||||||
<!-- F_10 -->
|
|
||||||
<g id="node2" class="node">
|
|
||||||
<title>F_10</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="185.5,-71.5 1.5,-71.5 1.5,-48.5 185.5,-48.5 185.5,-71.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="1.5,-48 1.5,-71 90.5,-71 90.5,-48 1.5,-48"/>
|
|
||||||
<text text-anchor="start" x="5.5" y="-55.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
|
||||||
<polygon fill="none" stroke="black" points="90.5,-48 90.5,-71 150.5,-71 150.5,-48 90.5,-48"/>
|
|
||||||
<text text-anchor="start" x="94.5" y="-55.8" font-family="arial" font-size="14.00">1.0 mm²</text>
|
|
||||||
<polygon fill="none" stroke="black" points="150.5,-48 150.5,-71 177.5,-71 177.5,-48 150.5,-48"/>
|
|
||||||
<text text-anchor="start" x="154.5" y="-55.8" font-family="arial" font-size="14.00">YE</text>
|
|
||||||
<polygon fill="#ffff00" stroke="transparent" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
|
||||||
<polygon fill="none" stroke="black" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
|
||||||
</g>
|
</g>
|
||||||
<!-- W1 -->
|
<!-- W1 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
@ -91,43 +85,43 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="331,-19 331,-21 469,-21 469,-19 331,-19"/>
|
<polygon fill="#000000" stroke="transparent" points="331,-19 331,-21 469,-21 469,-19 331,-19"/>
|
||||||
<text text-anchor="start" x="333" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="333" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- F_10--W1 -->
|
<!-- AUTOGENERATED_F_05_1--W1 -->
|
||||||
<g id="edge3" class="edge">
|
|
||||||
<title>F_10:e--W1:w</title>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C252.16,-58.41 267.78,-70.41 331,-70"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.94,-60 266.56,-72 331,-72"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C249.72,-61.59 265.34,-73.59 331,-74"/>
|
|
||||||
</g>
|
|
||||||
<!-- F_10--W1 -->
|
|
||||||
<g id="edge5" class="edge">
|
|
||||||
<title>F_10:e--W1:w</title>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C249.7,-58.47 265.23,-45.47 331,-45"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.98,-60 266.52,-47 331,-47"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C252.27,-61.53 267.8,-48.53 331,-49"/>
|
|
||||||
</g>
|
|
||||||
<!-- _F_05_1 -->
|
|
||||||
<g id="node3" class="node">
|
|
||||||
<title>_F_05_1</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-118.5 0,-118.5 0,-95.5 187,-95.5 187,-118.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="0.5,-95 0.5,-118 89.5,-118 89.5,-95 0.5,-95"/>
|
|
||||||
<text text-anchor="start" x="4.5" y="-102.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
|
||||||
<polygon fill="none" stroke="black" points="89.5,-95 89.5,-118 149.5,-118 149.5,-95 89.5,-95"/>
|
|
||||||
<text text-anchor="start" x="93.5" y="-102.8" font-family="arial" font-size="14.00">0.5 mm²</text>
|
|
||||||
<polygon fill="none" stroke="black" points="149.5,-95 149.5,-118 179.5,-118 179.5,-95 149.5,-95"/>
|
|
||||||
<text text-anchor="start" x="153.5" y="-102.8" font-family="arial" font-size="14.00">OG</text>
|
|
||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
|
||||||
<polygon fill="none" stroke="black" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
|
||||||
</g>
|
|
||||||
<!-- _F_05_1--W1 -->
|
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_F_05_1:e--W1:w</title>
|
<title>AUTOGENERATED_F_05_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105C250.08,-105.31 265.77,-95.31 331,-95"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105C250.08,-105.31 265.77,-95.31 331,-95"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-107C251.15,-107 266.85,-97 331,-97"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-107C251.15,-107 266.85,-97 331,-97"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-109C252.23,-108.69 267.92,-98.69 331,-99"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-109C252.23,-108.69 267.92,-98.69 331,-99"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F_05_2 -->
|
<!-- F1 -->
|
||||||
<g id="node4" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_F_05_2</title>
|
<title>F1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="185.5,-71.5 1.5,-71.5 1.5,-48.5 185.5,-48.5 185.5,-71.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1.5,-48 1.5,-71 90.5,-71 90.5,-48 1.5,-48"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-55.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="90.5,-48 90.5,-71 150.5,-71 150.5,-48 90.5,-48"/>
|
||||||
|
<text text-anchor="start" x="94.5" y="-55.8" font-family="arial" font-size="14.00">1.0 mm²</text>
|
||||||
|
<polygon fill="none" stroke="black" points="150.5,-48 150.5,-71 177.5,-71 177.5,-48 150.5,-48"/>
|
||||||
|
<text text-anchor="start" x="154.5" y="-55.8" font-family="arial" font-size="14.00">YE</text>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
||||||
|
<polygon fill="none" stroke="black" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1--W1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>F1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C252.16,-58.41 267.78,-70.41 331,-70"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.94,-60 266.56,-72 331,-72"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C249.72,-61.59 265.34,-73.59 331,-74"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1--W1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>F1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C249.7,-58.47 265.23,-45.47 331,-45"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.98,-60 266.52,-47 331,-47"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C252.27,-61.53 267.8,-48.53 331,-49"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_05_2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_F_05_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-24.5 0,-24.5 0,-1.5 187,-1.5 187,-24.5"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-24.5 0,-24.5 0,-1.5 187,-1.5 187,-24.5"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-1 0.5,-24 89.5,-24 89.5,-1 0.5,-1"/>
|
<polygon fill="none" stroke="black" points="0.5,-1 0.5,-24 89.5,-24 89.5,-1 0.5,-1"/>
|
||||||
<text text-anchor="start" x="4.5" y="-8.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-8.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -138,13 +132,42 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
<polygon fill="none" stroke="black" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F_05_2--W1 -->
|
<!-- AUTOGENERATED_F_05_2--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_F_05_2:e--W1:w</title>
|
<title>AUTOGENERATED_F_05_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-11C252.12,-11.26 267.87,-20.26 331,-20"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-11C252.12,-11.26 267.87,-20.26 331,-20"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-13C251.12,-13 266.88,-22 331,-22"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-13C251.12,-13 266.88,-22 331,-22"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-15C250.13,-14.74 265.88,-23.74 331,-24"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-15C250.13,-14.74 265.88,-23.74 331,-24"/>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="785,-152 613,-152 613,-14 785,-14 785,-152"/>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-129 613,-152 785,-152 785,-129 613,-129"/>
|
||||||
|
<text text-anchor="start" x="690" y="-136.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-106 613,-129 694,-129 694,-106 613,-106"/>
|
||||||
|
<text text-anchor="start" x="617" y="-113.8" font-family="arial" font-size="14.00">Molex 8981</text>
|
||||||
|
<polygon fill="none" stroke="black" points="694,-106 694,-129 745,-129 745,-106 694,-106"/>
|
||||||
|
<text text-anchor="start" x="698" y="-113.8" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="745,-106 745,-129 785,-129 785,-106 745,-106"/>
|
||||||
|
<text text-anchor="start" x="749" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-83 613,-106 686,-106 686,-83 613,-83"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-83 686,-106 785,-106 785,-83 686,-83"/>
|
||||||
|
<text text-anchor="start" x="718.5" y="-90.8" font-family="arial" font-size="14.00">+12V</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-60 613,-83 686,-83 686,-60 613,-60"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-60 686,-83 785,-83 785,-60 686,-60"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-67.8" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-37 613,-60 686,-60 686,-37 613,-37"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-37 686,-60 785,-60 785,-37 686,-37"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-44.8" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-14 613,-37 686,-37 686,-14 613,-14"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-14 686,-37 785,-37 785,-14 686,-14"/>
|
||||||
|
<text text-anchor="start" x="722.5" y="-21.8" font-family="arial" font-size="14.00">+5V</text>
|
||||||
|
</g>
|
||||||
<!-- W1--X1 -->
|
<!-- W1--X1 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--X1:w</title>
|
<title>W1:e--X1:w</title>
|
||||||
@ -175,56 +198,68 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Crimp ferrule, 0.5 mm², OG</td>
|
<td class="bom_col_description">Connector, Crimp ferrule, 0.5 mm², OG</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">2</td>
|
<td class="bom_col_qty">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_designators"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Crimp ferrule, 1.0 mm², YE</td>
|
<td class="bom_col_description">Connector, Crimp ferrule, 1.0 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_designators"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex 8981, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex 8981, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1</td>
|
<td class="bom_col_qty">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1</td>
|
<td class="bom_col_designators">X1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², BK</td>
|
<td class="bom_col_description">Wire, 0.5 mm², BK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.6</td>
|
<td class="bom_col_qty">0.6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², RD</td>
|
<td class="bom_col_description">Wire, 0.5 mm², RD</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">6</td>
|
<td class="bom_col_id">6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.5 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.5 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">0.3</td>
|
<td class="bom_col_qty">0.3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1</td>
|
<td class="bom_col_designators">W1</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||
150
tutorial/tutorial06.svg
generated
@ -1,54 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="793pt" height="192pt"
|
<svg width="793pt" height="192pt"
|
||||||
viewBox="0.00 0.00 793.00 192.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 793.00 192.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 188)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 188)">
|
||||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-188 789,-188 789,4 -4,4"/>
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-188 789,-188 789,4 -4,4"/>
|
||||||
<!-- X1 -->
|
<!-- AUTOGENERATED_F_05_1 -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>X1</title>
|
<title>AUTOGENERATED_F_05_1</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="785,-152 613,-152 613,-14 785,-14 785,-152"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-118.5 0,-118.5 0,-95.5 187,-95.5 187,-118.5"/>
|
||||||
<polygon fill="none" stroke="black" points="613,-129 613,-152 785,-152 785,-129 613,-129"/>
|
<polygon fill="none" stroke="black" points="0.5,-95 0.5,-118 89.5,-118 89.5,-95 0.5,-95"/>
|
||||||
<text text-anchor="start" x="690" y="-136.8" font-family="arial" font-size="14.00">X1</text>
|
<text text-anchor="start" x="4.5" y="-102.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
<polygon fill="none" stroke="black" points="613,-106 613,-129 694,-129 694,-106 613,-106"/>
|
<polygon fill="none" stroke="black" points="89.5,-95 89.5,-118 149.5,-118 149.5,-95 89.5,-95"/>
|
||||||
<text text-anchor="start" x="617" y="-113.8" font-family="arial" font-size="14.00">Molex 8981</text>
|
<text text-anchor="start" x="93.5" y="-102.8" font-family="arial" font-size="14.00">0.5 mm²</text>
|
||||||
<polygon fill="none" stroke="black" points="694,-106 694,-129 745,-129 745,-106 694,-106"/>
|
<polygon fill="none" stroke="black" points="149.5,-95 149.5,-118 179.5,-118 179.5,-95 149.5,-95"/>
|
||||||
<text text-anchor="start" x="698" y="-113.8" font-family="arial" font-size="14.00">female</text>
|
<text text-anchor="start" x="153.5" y="-102.8" font-family="arial" font-size="14.00">OG</text>
|
||||||
<polygon fill="none" stroke="black" points="745,-106 745,-129 785,-129 785,-106 745,-106"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
||||||
<text text-anchor="start" x="749" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
<polygon fill="none" stroke="black" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
||||||
<polygon fill="none" stroke="black" points="613,-83 613,-106 686,-106 686,-83 613,-83"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-83 686,-106 785,-106 785,-83 686,-83"/>
|
|
||||||
<text text-anchor="start" x="718.5" y="-90.8" font-family="arial" font-size="14.00">+12V</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-60 613,-83 686,-83 686,-60 613,-60"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-60 686,-83 785,-83 785,-60 686,-60"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-67.8" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-37 613,-60 686,-60 686,-37 613,-37"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-37 686,-60 785,-60 785,-37 686,-37"/>
|
|
||||||
<text text-anchor="start" x="719.5" y="-44.8" font-family="arial" font-size="14.00">GND</text>
|
|
||||||
<polygon fill="none" stroke="black" points="613,-14 613,-37 686,-37 686,-14 613,-14"/>
|
|
||||||
<text text-anchor="start" x="645.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
|
||||||
<polygon fill="none" stroke="black" points="686,-14 686,-37 785,-37 785,-14 686,-14"/>
|
|
||||||
<text text-anchor="start" x="722.5" y="-21.8" font-family="arial" font-size="14.00">+5V</text>
|
|
||||||
</g>
|
|
||||||
<!-- F_10 -->
|
|
||||||
<g id="node2" class="node">
|
|
||||||
<title>F_10</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="185.5,-71.5 1.5,-71.5 1.5,-48.5 185.5,-48.5 185.5,-71.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="1.5,-48 1.5,-71 90.5,-71 90.5,-48 1.5,-48"/>
|
|
||||||
<text text-anchor="start" x="5.5" y="-55.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
|
||||||
<polygon fill="none" stroke="black" points="90.5,-48 90.5,-71 150.5,-71 150.5,-48 90.5,-48"/>
|
|
||||||
<text text-anchor="start" x="94.5" y="-55.8" font-family="arial" font-size="14.00">1.0 mm²</text>
|
|
||||||
<polygon fill="none" stroke="black" points="150.5,-48 150.5,-71 177.5,-71 177.5,-48 150.5,-48"/>
|
|
||||||
<text text-anchor="start" x="154.5" y="-55.8" font-family="arial" font-size="14.00">YE</text>
|
|
||||||
<polygon fill="#ffff00" stroke="transparent" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
|
||||||
<polygon fill="none" stroke="black" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
|
||||||
</g>
|
</g>
|
||||||
<!-- W1 -->
|
<!-- W1 -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
@ -85,43 +56,43 @@
|
|||||||
<polygon fill="#000000" stroke="transparent" points="331,-19 331,-21 469,-21 469,-19 331,-19"/>
|
<polygon fill="#000000" stroke="transparent" points="331,-19 331,-21 469,-21 469,-19 331,-19"/>
|
||||||
<text text-anchor="start" x="333" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
<text text-anchor="start" x="333" y="-5.8" font-family="arial" font-size="14.00"> </text>
|
||||||
</g>
|
</g>
|
||||||
<!-- F_10--W1 -->
|
<!-- AUTOGENERATED_F_05_1--W1 -->
|
||||||
<g id="edge3" class="edge">
|
|
||||||
<title>F_10:e--W1:w</title>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C252.16,-58.41 267.78,-70.41 331,-70"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.94,-60 266.56,-72 331,-72"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C249.72,-61.59 265.34,-73.59 331,-74"/>
|
|
||||||
</g>
|
|
||||||
<!-- F_10--W1 -->
|
|
||||||
<g id="edge5" class="edge">
|
|
||||||
<title>F_10:e--W1:w</title>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C249.7,-58.47 265.23,-45.47 331,-45"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.98,-60 266.52,-47 331,-47"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C252.27,-61.53 267.8,-48.53 331,-49"/>
|
|
||||||
</g>
|
|
||||||
<!-- _F_05_1 -->
|
|
||||||
<g id="node3" class="node">
|
|
||||||
<title>_F_05_1</title>
|
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-118.5 0,-118.5 0,-95.5 187,-95.5 187,-118.5"/>
|
|
||||||
<polygon fill="none" stroke="black" points="0.5,-95 0.5,-118 89.5,-118 89.5,-95 0.5,-95"/>
|
|
||||||
<text text-anchor="start" x="4.5" y="-102.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
|
||||||
<polygon fill="none" stroke="black" points="89.5,-95 89.5,-118 149.5,-118 149.5,-95 89.5,-95"/>
|
|
||||||
<text text-anchor="start" x="93.5" y="-102.8" font-family="arial" font-size="14.00">0.5 mm²</text>
|
|
||||||
<polygon fill="none" stroke="black" points="149.5,-95 149.5,-118 179.5,-118 179.5,-95 149.5,-95"/>
|
|
||||||
<text text-anchor="start" x="153.5" y="-102.8" font-family="arial" font-size="14.00">OG</text>
|
|
||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
|
||||||
<polygon fill="none" stroke="black" points="179.5,-95 179.5,-118 187.5,-118 187.5,-95 179.5,-95"/>
|
|
||||||
</g>
|
|
||||||
<!-- _F_05_1--W1 -->
|
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>_F_05_1:e--W1:w</title>
|
<title>AUTOGENERATED_F_05_1:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105C250.08,-105.31 265.77,-95.31 331,-95"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-105C250.08,-105.31 265.77,-95.31 331,-95"/>
|
||||||
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-107C251.15,-107 266.85,-97 331,-97"/>
|
<path fill="none" stroke="#ffff00" stroke-width="2" d="M187,-107C251.15,-107 266.85,-97 331,-97"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-109C252.23,-108.69 267.92,-98.69 331,-99"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-109C252.23,-108.69 267.92,-98.69 331,-99"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F_05_2 -->
|
<!-- F1 -->
|
||||||
<g id="node4" class="node">
|
<g id="node2" class="node">
|
||||||
<title>_F_05_2</title>
|
<title>F1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="185.5,-71.5 1.5,-71.5 1.5,-48.5 185.5,-48.5 185.5,-71.5"/>
|
||||||
|
<polygon fill="none" stroke="black" points="1.5,-48 1.5,-71 90.5,-71 90.5,-48 1.5,-48"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-55.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
|
<polygon fill="none" stroke="black" points="90.5,-48 90.5,-71 150.5,-71 150.5,-48 90.5,-48"/>
|
||||||
|
<text text-anchor="start" x="94.5" y="-55.8" font-family="arial" font-size="14.00">1.0 mm²</text>
|
||||||
|
<polygon fill="none" stroke="black" points="150.5,-48 150.5,-71 177.5,-71 177.5,-48 150.5,-48"/>
|
||||||
|
<text text-anchor="start" x="154.5" y="-55.8" font-family="arial" font-size="14.00">YE</text>
|
||||||
|
<polygon fill="#ffff00" stroke="transparent" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
||||||
|
<polygon fill="none" stroke="black" points="177.5,-48 177.5,-71 185.5,-71 185.5,-48 177.5,-48"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1--W1 -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>F1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C252.16,-58.41 267.78,-70.41 331,-70"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.94,-60 266.56,-72 331,-72"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C249.72,-61.59 265.34,-73.59 331,-74"/>
|
||||||
|
</g>
|
||||||
|
<!-- F1--W1 -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>F1:e--W1:w</title>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-58C249.7,-58.47 265.23,-45.47 331,-45"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-60C250.98,-60 266.52,-47 331,-47"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="2" d="M186.5,-62C252.27,-61.53 267.8,-48.53 331,-49"/>
|
||||||
|
</g>
|
||||||
|
<!-- AUTOGENERATED_F_05_2 -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>AUTOGENERATED_F_05_2</title>
|
||||||
<polygon fill="#ffffff" stroke="black" points="187,-24.5 0,-24.5 0,-1.5 187,-1.5 187,-24.5"/>
|
<polygon fill="#ffffff" stroke="black" points="187,-24.5 0,-24.5 0,-1.5 187,-1.5 187,-24.5"/>
|
||||||
<polygon fill="none" stroke="black" points="0.5,-1 0.5,-24 89.5,-24 89.5,-1 0.5,-1"/>
|
<polygon fill="none" stroke="black" points="0.5,-1 0.5,-24 89.5,-24 89.5,-1 0.5,-1"/>
|
||||||
<text text-anchor="start" x="4.5" y="-8.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
<text text-anchor="start" x="4.5" y="-8.8" font-family="arial" font-size="14.00">Crimp ferrule</text>
|
||||||
@ -132,13 +103,42 @@
|
|||||||
<polygon fill="#ff8000" stroke="transparent" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
<polygon fill="#ff8000" stroke="transparent" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
||||||
<polygon fill="none" stroke="black" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
<polygon fill="none" stroke="black" points="179.5,-1 179.5,-24 187.5,-24 187.5,-1 179.5,-1"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- _F_05_2--W1 -->
|
<!-- AUTOGENERATED_F_05_2--W1 -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>_F_05_2:e--W1:w</title>
|
<title>AUTOGENERATED_F_05_2:e--W1:w</title>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-11C252.12,-11.26 267.87,-20.26 331,-20"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-11C252.12,-11.26 267.87,-20.26 331,-20"/>
|
||||||
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-13C251.12,-13 266.88,-22 331,-22"/>
|
<path fill="none" stroke="#ff0000" stroke-width="2" d="M187,-13C251.12,-13 266.88,-22 331,-22"/>
|
||||||
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-15C250.13,-14.74 265.88,-23.74 331,-24"/>
|
<path fill="none" stroke="#000000" stroke-width="2" d="M187,-15C250.13,-14.74 265.88,-23.74 331,-24"/>
|
||||||
</g>
|
</g>
|
||||||
|
<!-- X1 -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>X1</title>
|
||||||
|
<polygon fill="#ffffff" stroke="black" points="785,-152 613,-152 613,-14 785,-14 785,-152"/>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-129 613,-152 785,-152 785,-129 613,-129"/>
|
||||||
|
<text text-anchor="start" x="690" y="-136.8" font-family="arial" font-size="14.00">X1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-106 613,-129 694,-129 694,-106 613,-106"/>
|
||||||
|
<text text-anchor="start" x="617" y="-113.8" font-family="arial" font-size="14.00">Molex 8981</text>
|
||||||
|
<polygon fill="none" stroke="black" points="694,-106 694,-129 745,-129 745,-106 694,-106"/>
|
||||||
|
<text text-anchor="start" x="698" y="-113.8" font-family="arial" font-size="14.00">female</text>
|
||||||
|
<polygon fill="none" stroke="black" points="745,-106 745,-129 785,-129 785,-106 745,-106"/>
|
||||||
|
<text text-anchor="start" x="749" y="-113.8" font-family="arial" font-size="14.00">4-pin</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-83 613,-106 686,-106 686,-83 613,-83"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-90.8" font-family="arial" font-size="14.00">1</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-83 686,-106 785,-106 785,-83 686,-83"/>
|
||||||
|
<text text-anchor="start" x="718.5" y="-90.8" font-family="arial" font-size="14.00">+12V</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-60 613,-83 686,-83 686,-60 613,-60"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-67.8" font-family="arial" font-size="14.00">2</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-60 686,-83 785,-83 785,-60 686,-60"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-67.8" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-37 613,-60 686,-60 686,-37 613,-37"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-44.8" font-family="arial" font-size="14.00">3</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-37 686,-60 785,-60 785,-37 686,-37"/>
|
||||||
|
<text text-anchor="start" x="719.5" y="-44.8" font-family="arial" font-size="14.00">GND</text>
|
||||||
|
<polygon fill="none" stroke="black" points="613,-14 613,-37 686,-37 686,-14 613,-14"/>
|
||||||
|
<text text-anchor="start" x="645.5" y="-21.8" font-family="arial" font-size="14.00">4</text>
|
||||||
|
<polygon fill="none" stroke="black" points="686,-14 686,-37 785,-37 785,-14 686,-14"/>
|
||||||
|
<text text-anchor="start" x="722.5" y="-21.8" font-family="arial" font-size="14.00">+5V</text>
|
||||||
|
</g>
|
||||||
<!-- W1--X1 -->
|
<!-- W1--X1 -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>W1:e--X1:w</title>
|
<title>W1:e--X1:w</title>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
103
tutorial/tutorial07.html
generated
@ -3,11 +3,34 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
<meta name="generator" content="WireViz 0.4-dev - https://github.com/formatc1702/WireViz">
|
||||||
<title>tutorial07</title>
|
<title>tutorial07</title>
|
||||||
</head><body style="font-family:arial;background-color:#FFFFFF">
|
<style>
|
||||||
|
|
||||||
|
#bom table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bom th, td {
|
||||||
|
padding: 4px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bom_col_qty {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head><body style="font-family:arial;background-color:#ffffff">
|
||||||
<h1>tutorial07</h1>
|
<h1>tutorial07</h1>
|
||||||
<h2>Diagram</h2>
|
<h2>Diagram</h2>
|
||||||
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
|
||||||
<!-- Generated by graphviz version 2.49.0 (20210828.1703)
|
<div id="description">
|
||||||
|
<!-- %description% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
<!-- XML and DOCTYPE declarations from SVG file removed -->
|
||||||
|
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
|
||||||
-->
|
-->
|
||||||
<!-- Pages: 1 -->
|
<!-- Pages: 1 -->
|
||||||
<svg width="865pt" height="1024pt"
|
<svg width="865pt" height="1024pt"
|
||||||
@ -665,49 +688,61 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<!-- %notes% -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2>Bill of Materials</h2>
|
<h2>Bill of Materials</h2>
|
||||||
<table style="border:1px solid #000000; font-size: 14pt; border-spacing: 0px">
|
|
||||||
|
<div id="bom">
|
||||||
|
<table class="bom">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Id</th>
|
<th class="bom_col_id">Id</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Description</th>
|
<th class="bom_col_description">Description</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Qty</th>
|
<th class="bom_col_qty">Qty</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Unit</th>
|
<th class="bom_col_unit">Unit</th>
|
||||||
<th style="text-align:left; border:1px solid #000000; padding: 8px">Designators</th>
|
<th class="bom_col_designators">Designators</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">1</td>
|
<td class="bom_col_id">1</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Connector, Molex KK 254, female, 4 pins</td>
|
<td class="bom_col_description">Connector, Molex KK 254, female, 4 pins</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">6</td>
|
<td class="bom_col_qty">6</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px"></td>
|
<td class="bom_col_unit"></td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">X1, X2, X3, X4, X5, X6</td>
|
<td class="bom_col_designators">X1, X2, X3, X4, X5, X6</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">2</td>
|
<td class="bom_col_id">2</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², PK</td>
|
<td class="bom_col_description">Wire, 0.25 mm², PK</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">3</td>
|
<td class="bom_col_id">3</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², TQ</td>
|
<td class="bom_col_description">Wire, 0.25 mm², TQ</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">4</td>
|
<td class="bom_col_id">4</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², VT</td>
|
<td class="bom_col_description">Wire, 0.25 mm², VT</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="border:1px solid #000000; padding: 4px">5</td>
|
<td class="bom_col_id">5</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">Wire, 0.25 mm², YE</td>
|
<td class="bom_col_description">Wire, 0.25 mm², YE</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px; text-align:right">1.0</td>
|
<td class="bom_col_qty">1.0</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">m</td>
|
<td class="bom_col_unit">m</td>
|
||||||
<td style="border:1px solid #000000; padding: 4px">W1, W2, W3, W4, W5</td>
|
<td class="bom_col_designators">W1, W2, W3, W4, W5</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|||||||