@tscircuit/schematic-trace-solver 0.0.51 → 0.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,125 @@
1
+ import type { GraphicsObject } from "graphics-debug"
2
+ import type { NetLabelPlacement } from "lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver"
3
+ import type { SolvedTracePath } from "lib/solvers/SchematicTraceLinesSolver/SchematicTraceLinesSolver"
4
+ import { visualizeInputProblem } from "lib/solvers/SchematicTracePipelineSolver/visualizeInputProblem"
5
+ import type { InputProblem } from "lib/types/InputProblem"
6
+ import { getColorFromString } from "lib/utils/getColorFromString"
7
+ import type { LabelCandidate, LabelOverlap } from "./types"
8
+
9
+ const CANDIDATE_SELECTED_COLOR = "blue"
10
+ const CANDIDATE_REJECTED_COLOR = "red"
11
+
12
+ export const visualizeTraceAnchoredNetLabelOverlapSolver = (state: {
13
+ inputProblem: InputProblem
14
+ traces: SolvedTracePath[]
15
+ outputNetLabelPlacements: NetLabelPlacement[]
16
+ currentOverlap: LabelOverlap | null
17
+ currentCandidateResults: LabelCandidate[]
18
+ solved: boolean
19
+ }): GraphicsObject => {
20
+ const graphics = visualizeInputProblem(state.inputProblem)
21
+ ensureGraphicsArrays(graphics)
22
+
23
+ drawTraces(graphics, state.traces)
24
+ drawNetLabels(graphics, state.outputNetLabelPlacements)
25
+
26
+ if (!state.solved) {
27
+ drawCurrentOverlap(graphics, state)
28
+ drawCurrentCandidates(graphics, state.currentCandidateResults)
29
+ }
30
+
31
+ return graphics
32
+ }
33
+
34
+ const drawTraces = (graphics: GraphicsObject, traces: SolvedTracePath[]) => {
35
+ for (const trace of traces) {
36
+ graphics.lines!.push({
37
+ points: trace.tracePath,
38
+ strokeColor: "purple",
39
+ } as any)
40
+ }
41
+ }
42
+
43
+ const drawNetLabels = (
44
+ graphics: GraphicsObject,
45
+ labels: NetLabelPlacement[],
46
+ ) => {
47
+ for (const label of labels) {
48
+ graphics.rects!.push({
49
+ center: label.center,
50
+ width: label.width,
51
+ height: label.height,
52
+ fill: getColorFromString(label.globalConnNetId, 0.35),
53
+ strokeColor: getColorFromString(label.globalConnNetId, 0.9),
54
+ label: `netId: ${label.netId}\nglobalConnNetId: ${label.globalConnNetId}`,
55
+ } as any)
56
+ graphics.points!.push({
57
+ x: label.anchorPoint.x,
58
+ y: label.anchorPoint.y,
59
+ color: getColorFromString(label.globalConnNetId, 0.9),
60
+ label: `anchorPoint\norientation: ${label.orientation}`,
61
+ } as any)
62
+ }
63
+ }
64
+
65
+ const drawCurrentOverlap = (
66
+ graphics: GraphicsObject,
67
+ state: {
68
+ outputNetLabelPlacements: NetLabelPlacement[]
69
+ currentOverlap: LabelOverlap | null
70
+ },
71
+ ) => {
72
+ if (!state.currentOverlap) return
73
+
74
+ for (const labelIndex of [
75
+ state.currentOverlap.firstLabelIndex,
76
+ state.currentOverlap.secondLabelIndex,
77
+ ]) {
78
+ const label = state.outputNetLabelPlacements[labelIndex]
79
+ if (!label) continue
80
+
81
+ graphics.rects!.push({
82
+ center: label.center,
83
+ width: label.width,
84
+ height: label.height,
85
+ fill: "rgba(255, 0, 0, 0.2)",
86
+ strokeColor: CANDIDATE_REJECTED_COLOR,
87
+ label: `netlabel overlap target\n${label.netId ?? label.globalConnNetId}`,
88
+ } as any)
89
+ }
90
+ }
91
+
92
+ const drawCurrentCandidates = (
93
+ graphics: GraphicsObject,
94
+ candidates: LabelCandidate[],
95
+ ) => {
96
+ for (const candidate of candidates) {
97
+ const color = candidate.selected
98
+ ? CANDIDATE_SELECTED_COLOR
99
+ : CANDIDATE_REJECTED_COLOR
100
+ graphics.rects!.push({
101
+ center: candidate.center,
102
+ width: candidate.width,
103
+ height: candidate.height,
104
+ fill: candidate.selected
105
+ ? "rgba(0, 0, 255, 0.2)"
106
+ : "rgba(255, 0, 0, 0.15)",
107
+ strokeColor: color,
108
+ strokeDash: candidate.selected ? undefined : "4 2",
109
+ label: `${candidate.selected ? "selected" : candidate.status} netlabel overlap candidate\ntrace: ${candidate.traceId}\ndistance: ${candidate.distanceFromOriginal.toFixed(3)}`,
110
+ } as any)
111
+ graphics.points!.push({
112
+ ...candidate.anchorPoint,
113
+ color,
114
+ label: `candidate anchor\n${candidate.status}`,
115
+ } as any)
116
+ }
117
+ }
118
+
119
+ const ensureGraphicsArrays = (graphics: GraphicsObject) => {
120
+ if (!graphics.lines) graphics.lines = []
121
+ if (!graphics.points) graphics.points = []
122
+ if (!graphics.rects) graphics.rects = []
123
+ if (!graphics.circles) graphics.circles = []
124
+ if (!graphics.texts) graphics.texts = []
125
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.51",
4
+ "version": "0.0.52",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -70,7 +70,7 @@ orientation: x-" data-x="-1.3499999999999999" data-y="0.30000000000000004" cx="1
70
70
  </g>
71
71
  <g>
72
72
  <circle data-type="point" data-label="anchorPoint
73
- orientation: y+" data-x="-1.5" data-y="0.10000000000000003" cx="141.8848167539267" cy="366.5445026178011" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
73
+ orientation: y-" data-x="-1.5" data-y="0.10000000000000003" cx="141.8848167539267" cy="366.5445026178011" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
74
74
  </g>
75
75
  <g>
76
76
  <circle data-type="point" data-label="anchorPoint
@@ -125,7 +125,7 @@ globalConnNetId: connectivity_net2" data-x="-1.575" data-y="0.30000000000000004"
125
125
  </g>
126
126
  <g>
127
127
  <rect data-type="rect" data-label="netId: .U1 .OUT2 to .D2 .pin1
128
- globalConnNetId: connectivity_net3" data-x="-1.5" data-y="0.32500000000000007" x="134.55497382198953" y="333.5602094240838" width="14.65968586387433" height="32.98429319371729" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013642857142857144" />
128
+ globalConnNetId: connectivity_net3" data-x="-1.5" data-y="-0.12499999999999997" x="134.55497382198953" y="366.5445026178011" width="14.65968586387433" height="32.984293193717235" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013642857142857144" />
129
129
  </g>
130
130
  <g>
131
131
  <rect data-type="rect" data-label="netId: .U1 .VCC to .C1 .pin1
@@ -2,225 +2,225 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="P.1
5
- x-" data-x="-0.6000000000000001" data-y="1.0999999999999999" cx="184.51612903225808" cy="112.25806451612902" r="3" fill="hsl(235, 100%, 50%, 0.8)" />
5
+ x-" data-x="-0.6000000000000001" data-y="1.0999999999999999" cx="193.54838709677418" cy="112.25806451612902" r="3" fill="hsl(235, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="P.2
9
- x-" data-x="-0.6000000000000001" data-y="0.8999999999999999" cx="184.51612903225808" cy="148.38709677419354" r="3" fill="hsl(236, 100%, 50%, 0.8)" />
9
+ x-" data-x="-0.6000000000000001" data-y="0.8999999999999999" cx="193.54838709677418" cy="148.38709677419354" r="3" fill="hsl(236, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="P.3
13
- x-" data-x="-0.6000000000000001" data-y="0.6999999999999998" cx="184.51612903225808" cy="184.51612903225805" r="3" fill="hsl(237, 100%, 50%, 0.8)" />
13
+ x-" data-x="-0.6000000000000001" data-y="0.6999999999999998" cx="193.54838709677418" cy="184.51612903225805" r="3" fill="hsl(237, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
16
  <circle data-type="point" data-label="P.4
17
- x-" data-x="-0.6000000000000001" data-y="0.4999999999999998" cx="184.51612903225808" cy="220.6451612903226" r="3" fill="hsl(238, 100%, 50%, 0.8)" />
17
+ x-" data-x="-0.6000000000000001" data-y="0.4999999999999998" cx="193.54838709677418" cy="220.6451612903226" r="3" fill="hsl(238, 100%, 50%, 0.8)" />
18
18
  </g>
19
19
  <g>
20
20
  <circle data-type="point" data-label="P.5
21
- x-" data-x="-0.6000000000000001" data-y="0.2999999999999998" cx="184.51612903225808" cy="256.7741935483871" r="3" fill="hsl(239, 100%, 50%, 0.8)" />
21
+ x-" data-x="-0.6000000000000001" data-y="0.2999999999999998" cx="193.54838709677418" cy="256.7741935483871" r="3" fill="hsl(239, 100%, 50%, 0.8)" />
22
22
  </g>
23
23
  <g>
24
24
  <circle data-type="point" data-label="P.6
25
- x-" data-x="-0.6000000000000001" data-y="0.09999999999999987" cx="184.51612903225808" cy="292.9032258064516" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
25
+ x-" data-x="-0.6000000000000001" data-y="0.09999999999999987" cx="193.54838709677418" cy="292.9032258064516" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
26
26
  </g>
27
27
  <g>
28
28
  <circle data-type="point" data-label="P.7
29
- x-" data-x="-0.6000000000000001" data-y="-0.10000000000000009" cx="184.51612903225808" cy="329.0322580645161" r="3" fill="hsl(241, 100%, 50%, 0.8)" />
29
+ x-" data-x="-0.6000000000000001" data-y="-0.10000000000000009" cx="193.54838709677418" cy="329.0322580645161" r="3" fill="hsl(241, 100%, 50%, 0.8)" />
30
30
  </g>
31
31
  <g>
32
32
  <circle data-type="point" data-label="P.8
33
- x-" data-x="-0.6000000000000001" data-y="-0.30000000000000004" cx="184.51612903225808" cy="365.1612903225806" r="3" fill="hsl(242, 100%, 50%, 0.8)" />
33
+ x-" data-x="-0.6000000000000001" data-y="-0.30000000000000004" cx="193.54838709677418" cy="365.1612903225806" r="3" fill="hsl(242, 100%, 50%, 0.8)" />
34
34
  </g>
35
35
  <g>
36
36
  <circle data-type="point" data-label="P.9
37
- x-" data-x="-0.6000000000000001" data-y="-0.5" cx="184.51612903225808" cy="401.2903225806451" r="3" fill="hsl(243, 100%, 50%, 0.8)" />
37
+ x-" data-x="-0.6000000000000001" data-y="-0.5" cx="193.54838709677418" cy="401.2903225806451" r="3" fill="hsl(243, 100%, 50%, 0.8)" />
38
38
  </g>
39
39
  <g>
40
40
  <circle data-type="point" data-label="P.10
41
- x-" data-x="-0.6000000000000001" data-y="-0.7" cx="184.51612903225808" cy="437.41935483870964" r="3" fill="hsl(133, 100%, 50%, 0.8)" />
41
+ x-" data-x="-0.6000000000000001" data-y="-0.7" cx="193.54838709677418" cy="437.41935483870964" r="3" fill="hsl(133, 100%, 50%, 0.8)" />
42
42
  </g>
43
43
  <g>
44
44
  <circle data-type="point" data-label="P.11
45
- x-" data-x="-0.6000000000000001" data-y="-0.8999999999999999" cx="184.51612903225808" cy="473.54838709677415" r="3" fill="hsl(134, 100%, 50%, 0.8)" />
45
+ x-" data-x="-0.6000000000000001" data-y="-0.8999999999999999" cx="193.54838709677418" cy="473.54838709677415" r="3" fill="hsl(134, 100%, 50%, 0.8)" />
46
46
  </g>
47
47
  <g>
48
48
  <circle data-type="point" data-label="P.12
49
- x-" data-x="-0.6000000000000001" data-y="-1.0999999999999999" cx="184.51612903225808" cy="509.67741935483866" r="3" fill="hsl(135, 100%, 50%, 0.8)" />
49
+ x-" data-x="-0.6000000000000001" data-y="-1.0999999999999999" cx="193.54838709677418" cy="509.67741935483866" r="3" fill="hsl(135, 100%, 50%, 0.8)" />
50
50
  </g>
51
51
  <g>
52
52
  <circle data-type="point" data-label="P.13
53
- x+" data-x="0.6000000000000001" data-y="-1.0999999999999999" cx="401.29032258064524" cy="509.67741935483866" r="3" fill="hsl(136, 100%, 50%, 0.8)" />
53
+ x+" data-x="0.6000000000000001" data-y="-1.0999999999999999" cx="410.32258064516134" cy="509.67741935483866" r="3" fill="hsl(136, 100%, 50%, 0.8)" />
54
54
  </g>
55
55
  <g>
56
56
  <circle data-type="point" data-label="P.14
57
- x+" data-x="0.6000000000000001" data-y="-0.8999999999999999" cx="401.29032258064524" cy="473.54838709677415" r="3" fill="hsl(137, 100%, 50%, 0.8)" />
57
+ x+" data-x="0.6000000000000001" data-y="-0.8999999999999999" cx="410.32258064516134" cy="473.54838709677415" r="3" fill="hsl(137, 100%, 50%, 0.8)" />
58
58
  </g>
59
59
  <g>
60
60
  <circle data-type="point" data-label="P.15
61
- x+" data-x="0.6000000000000001" data-y="-0.6999999999999998" cx="401.29032258064524" cy="437.41935483870964" r="3" fill="hsl(138, 100%, 50%, 0.8)" />
61
+ x+" data-x="0.6000000000000001" data-y="-0.6999999999999998" cx="410.32258064516134" cy="437.41935483870964" r="3" fill="hsl(138, 100%, 50%, 0.8)" />
62
62
  </g>
63
63
  <g>
64
64
  <circle data-type="point" data-label="P.16
65
- x+" data-x="0.6000000000000001" data-y="-0.4999999999999998" cx="401.29032258064524" cy="401.2903225806451" r="3" fill="hsl(139, 100%, 50%, 0.8)" />
65
+ x+" data-x="0.6000000000000001" data-y="-0.4999999999999998" cx="410.32258064516134" cy="401.2903225806451" r="3" fill="hsl(139, 100%, 50%, 0.8)" />
66
66
  </g>
67
67
  <g>
68
68
  <circle data-type="point" data-label="P.17
69
- x+" data-x="0.6000000000000001" data-y="-0.2999999999999998" cx="401.29032258064524" cy="365.1612903225806" r="3" fill="hsl(140, 100%, 50%, 0.8)" />
69
+ x+" data-x="0.6000000000000001" data-y="-0.2999999999999998" cx="410.32258064516134" cy="365.1612903225806" r="3" fill="hsl(140, 100%, 50%, 0.8)" />
70
70
  </g>
71
71
  <g>
72
72
  <circle data-type="point" data-label="P.18
73
- x+" data-x="0.6000000000000001" data-y="-0.09999999999999987" cx="401.29032258064524" cy="329.0322580645161" r="3" fill="hsl(141, 100%, 50%, 0.8)" />
73
+ x+" data-x="0.6000000000000001" data-y="-0.09999999999999987" cx="410.32258064516134" cy="329.0322580645161" r="3" fill="hsl(141, 100%, 50%, 0.8)" />
74
74
  </g>
75
75
  <g>
76
76
  <circle data-type="point" data-label="P.19
77
- x+" data-x="0.6000000000000001" data-y="0.10000000000000009" cx="401.29032258064524" cy="292.9032258064516" r="3" fill="hsl(142, 100%, 50%, 0.8)" />
77
+ x+" data-x="0.6000000000000001" data-y="0.10000000000000009" cx="410.32258064516134" cy="292.9032258064516" r="3" fill="hsl(142, 100%, 50%, 0.8)" />
78
78
  </g>
79
79
  <g>
80
80
  <circle data-type="point" data-label="P.20
81
- x+" data-x="0.6000000000000001" data-y="0.30000000000000004" cx="401.29032258064524" cy="256.7741935483871" r="3" fill="hsl(164, 100%, 50%, 0.8)" />
81
+ x+" data-x="0.6000000000000001" data-y="0.30000000000000004" cx="410.32258064516134" cy="256.7741935483871" r="3" fill="hsl(164, 100%, 50%, 0.8)" />
82
82
  </g>
83
83
  <g>
84
84
  <circle data-type="point" data-label="P.21
85
- x+" data-x="0.6000000000000001" data-y="0.5" cx="401.29032258064524" cy="220.64516129032256" r="3" fill="hsl(165, 100%, 50%, 0.8)" />
85
+ x+" data-x="0.6000000000000001" data-y="0.5" cx="410.32258064516134" cy="220.64516129032256" r="3" fill="hsl(165, 100%, 50%, 0.8)" />
86
86
  </g>
87
87
  <g>
88
88
  <circle data-type="point" data-label="P.22
89
- x+" data-x="0.6000000000000001" data-y="0.7" cx="401.29032258064524" cy="184.51612903225805" r="3" fill="hsl(166, 100%, 50%, 0.8)" />
89
+ x+" data-x="0.6000000000000001" data-y="0.7" cx="410.32258064516134" cy="184.51612903225805" r="3" fill="hsl(166, 100%, 50%, 0.8)" />
90
90
  </g>
91
91
  <g>
92
92
  <circle data-type="point" data-label="P.23
93
- x+" data-x="0.6000000000000001" data-y="0.8999999999999999" cx="401.29032258064524" cy="148.38709677419354" r="3" fill="hsl(167, 100%, 50%, 0.8)" />
93
+ x+" data-x="0.6000000000000001" data-y="0.8999999999999999" cx="410.32258064516134" cy="148.38709677419354" r="3" fill="hsl(167, 100%, 50%, 0.8)" />
94
94
  </g>
95
95
  <g>
96
96
  <circle data-type="point" data-label="P.24
97
- x+" data-x="0.6000000000000001" data-y="1.0999999999999999" cx="401.29032258064524" cy="112.25806451612902" r="3" fill="hsl(168, 100%, 50%, 0.8)" />
97
+ x+" data-x="0.6000000000000001" data-y="1.0999999999999999" cx="410.32258064516134" cy="112.25806451612902" r="3" fill="hsl(168, 100%, 50%, 0.8)" />
98
98
  </g>
99
99
  <g>
100
100
  <circle data-type="point" data-label="anchorPoint
101
- orientation: y-" data-x="-0.8" data-y="1.0999999999999999" cx="148.38709677419357" cy="112.25806451612902" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
101
+ orientation: x-" data-x="-0.8" data-y="1.0999999999999999" cx="157.41935483870967" cy="112.25806451612902" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
102
102
  </g>
103
103
  <g>
104
104
  <circle data-type="point" data-label="anchorPoint
105
- orientation: x-" data-x="-0.6000000000000001" data-y="0.8999999999999999" cx="184.51612903225808" cy="148.38709677419354" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
105
+ orientation: x-" data-x="-0.6000000000000001" data-y="0.8999999999999999" cx="193.54838709677418" cy="148.38709677419354" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
106
106
  </g>
107
107
  <g>
108
108
  <circle data-type="point" data-label="anchorPoint
109
- orientation: x+" data-x="0.6000000000000001" data-y="-0.2999999999999998" cx="401.29032258064524" cy="365.1612903225806" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
109
+ orientation: x+" data-x="0.6000000000000001" data-y="-0.2999999999999998" cx="410.32258064516134" cy="365.1612903225806" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
110
110
  </g>
111
111
  <g>
112
112
  <circle data-type="point" data-label="anchorPoint
113
- orientation: x-" data-x="-0.6000000000000001" data-y="0.6999999999999998" cx="184.51612903225808" cy="184.51612903225805" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
113
+ orientation: x-" data-x="-0.6000000000000001" data-y="0.6999999999999998" cx="193.54838709677418" cy="184.51612903225805" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
114
114
  </g>
115
115
  <g>
116
116
  <circle data-type="point" data-label="anchorPoint
117
- orientation: x+" data-x="0.6000000000000001" data-y="-0.4999999999999998" cx="401.29032258064524" cy="401.2903225806451" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
117
+ orientation: x+" data-x="0.6000000000000001" data-y="-0.4999999999999998" cx="410.32258064516134" cy="401.2903225806451" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
118
118
  </g>
119
119
  <g>
120
120
  <circle data-type="point" data-label="anchorPoint
121
- orientation: y+" data-x="-0.8755000000000002" data-y="0.4999999999999998" cx="134.7483870967742" cy="220.6451612903226" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
121
+ orientation: y+" data-x="-1.1510000000000002" data-y="0.4999999999999998" cx="94.01290322580641" cy="220.6451612903226" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
122
122
  </g>
123
123
  <g>
124
124
  <circle data-type="point" data-label="anchorPoint
125
- orientation: x-" data-x="-0.6000000000000001" data-y="0.2999999999999998" cx="184.51612903225808" cy="256.7741935483871" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
125
+ orientation: x-" data-x="-0.6000000000000001" data-y="0.2999999999999998" cx="193.54838709677418" cy="256.7741935483871" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
126
126
  </g>
127
127
  <g>
128
128
  <circle data-type="point" data-label="anchorPoint
129
- orientation: x+" data-x="0.6000000000000001" data-y="-0.8999999999999999" cx="401.29032258064524" cy="473.54838709677415" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
129
+ orientation: x+" data-x="0.6000000000000001" data-y="-0.8999999999999999" cx="410.32258064516134" cy="473.54838709677415" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
130
130
  </g>
131
131
  <g>
132
132
  <circle data-type="point" data-label="anchorPoint
133
- orientation: x-" data-x="-0.6000000000000001" data-y="0.09999999999999987" cx="184.51612903225808" cy="292.9032258064516" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
133
+ orientation: x-" data-x="-0.6000000000000001" data-y="0.09999999999999987" cx="193.54838709677418" cy="292.9032258064516" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
134
134
  </g>
135
135
  <g>
136
136
  <circle data-type="point" data-label="anchorPoint
137
- orientation: x+" data-x="0.6000000000000001" data-y="-1.0999999999999999" cx="401.29032258064524" cy="509.67741935483866" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
137
+ orientation: x+" data-x="0.6000000000000001" data-y="-1.0999999999999999" cx="410.32258064516134" cy="509.67741935483866" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
138
138
  </g>
139
139
  <g>
140
140
  <circle data-type="point" data-label="anchorPoint
141
- orientation: x-" data-x="-0.6000000000000001" data-y="-0.10000000000000009" cx="184.51612903225808" cy="329.0322580645161" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
141
+ orientation: x-" data-x="-0.6000000000000001" data-y="-0.10000000000000009" cx="193.54838709677418" cy="329.0322580645161" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
142
142
  </g>
143
143
  <g>
144
144
  <circle data-type="point" data-label="anchorPoint
145
- orientation: x+" data-x="0.6000000000000001" data-y="0.10000000000000009" cx="401.29032258064524" cy="292.9032258064516" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
145
+ orientation: x+" data-x="0.6000000000000001" data-y="0.10000000000000009" cx="410.32258064516134" cy="292.9032258064516" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
146
146
  </g>
147
147
  <g>
148
- <polyline data-points="-0.6000000000000001,1.0999999999999999 0.6000000000000001,-0.09999999999999987" data-type="line" data-label="" points="184.51612903225808,112.25806451612902 401.29032258064524,329.0322580645161" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1" />
148
+ <polyline data-points="-0.6000000000000001,1.0999999999999999 0.6000000000000001,-0.09999999999999987" data-type="line" data-label="" points="193.54838709677418,112.25806451612902 410.32258064516134,329.0322580645161" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1" />
149
149
  </g>
150
150
  <g>
151
- <polyline data-points="-0.6000000000000001,0.8999999999999999 0.6000000000000001,-0.2999999999999998" data-type="line" data-label="" points="184.51612903225808,148.38709677419354 401.29032258064524,365.1612903225806" fill="none" stroke="hsl(128, 100%, 50%, 0.8)" stroke-width="1" />
151
+ <polyline data-points="-0.6000000000000001,0.8999999999999999 0.6000000000000001,-0.2999999999999998" data-type="line" data-label="" points="193.54838709677418,148.38709677419354 410.32258064516134,365.1612903225806" fill="none" stroke="hsl(128, 100%, 50%, 0.8)" stroke-width="1" />
152
152
  </g>
153
153
  <g>
154
- <polyline data-points="-0.6000000000000001,0.6999999999999998 0.6000000000000001,-0.4999999999999998" data-type="line" data-label="" points="184.51612903225808,184.51612903225805 401.29032258064524,401.2903225806451" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1" />
154
+ <polyline data-points="-0.6000000000000001,0.6999999999999998 0.6000000000000001,-0.4999999999999998" data-type="line" data-label="" points="193.54838709677418,184.51612903225805 410.32258064516134,401.2903225806451" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1" />
155
155
  </g>
156
156
  <g>
157
- <polyline data-points="-0.6000000000000001,0.4999999999999998 0.6000000000000001,-0.6999999999999998" data-type="line" data-label="" points="184.51612903225808,220.6451612903226 401.29032258064524,437.41935483870964" fill="none" stroke="hsl(144, 100%, 50%, 0.8)" stroke-width="1" />
157
+ <polyline data-points="-0.6000000000000001,0.4999999999999998 0.6000000000000001,-0.6999999999999998" data-type="line" data-label="" points="193.54838709677418,220.6451612903226 410.32258064516134,437.41935483870964" fill="none" stroke="hsl(144, 100%, 50%, 0.8)" stroke-width="1" />
158
158
  </g>
159
159
  <g>
160
- <polyline data-points="-0.6000000000000001,0.2999999999999998 0.6000000000000001,-0.8999999999999999" data-type="line" data-label="" points="184.51612903225808,256.7741935483871 401.29032258064524,473.54838709677415" fill="none" stroke="hsl(104, 100%, 50%, 0.8)" stroke-width="1" />
160
+ <polyline data-points="-0.6000000000000001,0.2999999999999998 0.6000000000000001,-0.8999999999999999" data-type="line" data-label="" points="193.54838709677418,256.7741935483871 410.32258064516134,473.54838709677415" fill="none" stroke="hsl(104, 100%, 50%, 0.8)" stroke-width="1" />
161
161
  </g>
162
162
  <g>
163
- <polyline data-points="-0.6000000000000001,0.09999999999999987 0.6000000000000001,-1.0999999999999999" data-type="line" data-label="" points="184.51612903225808,292.9032258064516 401.29032258064524,509.67741935483866" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1" />
163
+ <polyline data-points="-0.6000000000000001,0.09999999999999987 0.6000000000000001,-1.0999999999999999" data-type="line" data-label="" points="193.54838709677418,292.9032258064516 410.32258064516134,509.67741935483866" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1" />
164
164
  </g>
165
165
  <g>
166
- <polyline data-points="-0.6000000000000001,-0.10000000000000009 0.6000000000000001,0.10000000000000009" data-type="line" data-label="" points="184.51612903225808,329.0322580645161 401.29032258064524,292.9032258064516" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1" />
166
+ <polyline data-points="-0.6000000000000001,-0.10000000000000009 0.6000000000000001,0.10000000000000009" data-type="line" data-label="" points="193.54838709677418,329.0322580645161 410.32258064516134,292.9032258064516" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1" />
167
167
  </g>
168
168
  <g>
169
- <polyline data-points="-0.6000000000000001,1.0999999999999999 -0.8,1.0999999999999999 -0.8,1.4999999999999998 1.1510000000000002,1.4999999999999998 1.1510000000000002,-0.09999999999999992 0.6000000000000001,-0.09999999999999987" data-type="line" data-label="" points="184.51612903225808,112.25806451612902 148.38709677419357,112.25806451612902 148.38709677419357,40 500.82580645161295,40 500.82580645161295,329.0322580645161 401.29032258064524,329.0322580645161" fill="none" stroke="purple" stroke-width="1" />
169
+ <polyline data-points="-0.6000000000000001,1.0999999999999999 -0.8,1.0999999999999999 -0.8,1.4999999999999998 1.1510000000000002,1.4999999999999998 1.1510000000000002,-0.09999999999999992 0.6000000000000001,-0.09999999999999987" data-type="line" data-label="" points="193.54838709677418,112.25806451612902 157.41935483870967,112.25806451612902 157.41935483870967,40 509.85806451612905,40 509.85806451612905,329.0322580645161 410.32258064516134,329.0322580645161" fill="none" stroke="purple" stroke-width="1" />
170
170
  </g>
171
171
  <g>
172
- <polyline data-points="-0.6000000000000001,0.4999999999999998 -1.1510000000000002,0.4999999999999998 -1.1510000000000002,-1.6 1.451,-1.6 1.451,-0.6999999999999998 0.6000000000000001,-0.6999999999999998" data-type="line" data-label="" points="184.51612903225808,220.6451612903226 84.98064516129031,220.6451612903226 84.98064516129031,600 555.0193548387097,600 555.0193548387097,437.41935483870964 401.29032258064524,437.41935483870964" fill="none" stroke="purple" stroke-width="1" />
172
+ <polyline data-points="-0.6000000000000001,0.4999999999999998 -1.1510000000000002,0.4999999999999998 -1.1510000000000002,-1.6 1.451,-1.6 1.451,-0.6999999999999998 0.6000000000000001,-0.6999999999999998" data-type="line" data-label="" points="193.54838709677418,220.6451612903226 94.01290322580641,220.6451612903226 94.01290322580641,600 564.0516129032258,600 564.0516129032258,437.41935483870964 410.32258064516134,437.41935483870964" fill="none" stroke="purple" stroke-width="1" />
173
173
  </g>
174
174
  <g>
175
- <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="184.51612903225808" y="76.12903225806451" width="216.77419354838716" height="469.67741935483866" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.005535714285714285" />
175
+ <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="193.54838709677418" y="76.12903225806451" width="216.77419354838716" height="469.67741935483866" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.005535714285714285" />
176
176
  </g>
177
177
  <g>
178
178
  <rect data-type="rect" data-label="netId: P.pin1 to P.pin18
179
- globalConnNetId: connectivity_net0" data-x="-0.8" data-y="0.8749999999999999" x="130.3225806451613" y="112.25806451612902" width="36.12903225806451" height="81.29032258064515" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
179
+ globalConnNetId: connectivity_net0" data-x="-1.0250000000000001" data-y="1.0999999999999999" x="76.12903225806446" y="94.19354838709674" width="81.29032258064518" height="36.12903225806454" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
180
180
  </g>
181
181
  <g>
182
182
  <rect data-type="rect" data-label="netId: P.pin2 to P.pin17
183
- globalConnNetId: connectivity_net1" data-x="-0.8260000000000001" data-y="0.8999999999999999" x="103.04516129032257" y="130.32258064516128" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
183
+ globalConnNetId: connectivity_net1" data-x="-0.8260000000000001" data-y="0.8999999999999999" x="112.07741935483867" y="130.32258064516128" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
184
184
  </g>
185
185
  <g>
186
186
  <rect data-type="rect" data-label="netId: P.pin2 to P.pin17
187
- globalConnNetId: connectivity_net1" data-x="0.8260000000000001" data-y="-0.2999999999999998" x="401.4709677419355" y="347.0967741935483" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
187
+ globalConnNetId: connectivity_net1" data-x="0.8260000000000001" data-y="-0.2999999999999998" x="410.5032258064516" y="347.0967741935483" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
188
188
  </g>
189
189
  <g>
190
190
  <rect data-type="rect" data-label="netId: P.pin3 to P.pin16
191
- globalConnNetId: connectivity_net2" data-x="-0.8260000000000001" data-y="0.6999999999999998" x="103.04516129032257" y="166.4516129032258" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
191
+ globalConnNetId: connectivity_net2" data-x="-0.8260000000000001" data-y="0.6999999999999998" x="112.07741935483867" y="166.4516129032258" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
192
192
  </g>
193
193
  <g>
194
194
  <rect data-type="rect" data-label="netId: P.pin3 to P.pin16
195
- globalConnNetId: connectivity_net2" data-x="0.8260000000000001" data-y="-0.4999999999999998" x="401.4709677419355" y="383.2258064516128" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
195
+ globalConnNetId: connectivity_net2" data-x="0.8260000000000001" data-y="-0.4999999999999998" x="410.5032258064516" y="383.2258064516128" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
196
196
  </g>
197
197
  <g>
198
198
  <rect data-type="rect" data-label="netId: P.pin4 to P.pin15
199
- globalConnNetId: connectivity_net3" data-x="-0.8755000000000002" data-y="0.7249999999999998" x="116.68387096774194" y="139.35483870967744" width="36.12903225806451" height="81.29032258064515" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
199
+ globalConnNetId: connectivity_net3" data-x="-1.1510000000000002" data-y="0.7249999999999998" x="75.94838709677413" y="139.35483870967744" width="36.12903225806454" height="81.29032258064515" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
200
200
  </g>
201
201
  <g>
202
202
  <rect data-type="rect" data-label="netId: P.pin5 to P.pin14
203
- globalConnNetId: connectivity_net4" data-x="-0.8260000000000001" data-y="0.2999999999999998" x="103.04516129032257" y="238.70967741935485" width="81.29032258064518" height="36.12903225806454" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
203
+ globalConnNetId: connectivity_net4" data-x="-0.8260000000000001" data-y="0.2999999999999998" x="112.07741935483867" y="238.70967741935485" width="81.29032258064518" height="36.12903225806454" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
204
204
  </g>
205
205
  <g>
206
206
  <rect data-type="rect" data-label="netId: P.pin5 to P.pin14
207
- globalConnNetId: connectivity_net4" data-x="0.8260000000000001" data-y="-0.8999999999999999" x="401.4709677419355" y="455.4838709677419" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
207
+ globalConnNetId: connectivity_net4" data-x="0.8260000000000001" data-y="-0.8999999999999999" x="410.5032258064516" y="455.4838709677419" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
208
208
  </g>
209
209
  <g>
210
210
  <rect data-type="rect" data-label="netId: P.pin6 to P.pin13
211
- globalConnNetId: connectivity_net5" data-x="-0.8260000000000001" data-y="0.09999999999999987" x="103.04516129032257" y="274.83870967741933" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
211
+ globalConnNetId: connectivity_net5" data-x="-0.8260000000000001" data-y="0.09999999999999987" x="112.07741935483867" y="274.83870967741933" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
212
212
  </g>
213
213
  <g>
214
214
  <rect data-type="rect" data-label="netId: P.pin6 to P.pin13
215
- globalConnNetId: connectivity_net5" data-x="0.8260000000000001" data-y="-1.0999999999999999" x="401.4709677419355" y="491.6129032258064" width="81.29032258064524" height="36.12903225806457" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
215
+ globalConnNetId: connectivity_net5" data-x="0.8260000000000001" data-y="-1.0999999999999999" x="410.5032258064516" y="491.6129032258064" width="81.29032258064524" height="36.12903225806457" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
216
216
  </g>
217
217
  <g>
218
218
  <rect data-type="rect" data-label="netId: P.pin7 to P.pin19
219
- globalConnNetId: connectivity_net6" data-x="-0.8260000000000001" data-y="-0.10000000000000009" x="103.04516129032257" y="310.96774193548384" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
219
+ globalConnNetId: connectivity_net6" data-x="-0.8260000000000001" data-y="-0.10000000000000009" x="112.07741935483867" y="310.96774193548384" width="81.29032258064518" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
220
220
  </g>
221
221
  <g>
222
222
  <rect data-type="rect" data-label="netId: P.pin7 to P.pin19
223
- globalConnNetId: connectivity_net6" data-x="0.8260000000000001" data-y="0.10000000000000009" x="401.4709677419355" y="274.83870967741933" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
223
+ globalConnNetId: connectivity_net6" data-x="0.8260000000000001" data-y="0.10000000000000009" x="410.5032258064516" y="274.83870967741933" width="81.29032258064524" height="36.12903225806451" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.005535714285714285" />
224
224
  </g>
225
225
  <g id="crosshair" style="display: none">
226
226
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -252,7 +252,7 @@ globalConnNetId: connectivity_net6" data-x="0.8260000000000001" data-y="0.100000
252
252
  const matrix = {
253
253
  "a": 180.6451612903226,
254
254
  "c": 0,
255
- "e": 292.90322580645164,
255
+ "e": 301.93548387096774,
256
256
  "b": 0,
257
257
  "d": -180.6451612903226,
258
258
  "f": 310.96774193548384