@tscircuit/schematic-trace-solver 0.0.101 → 0.0.103
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.
- package/dist/index.d.ts +14 -6
- package/dist/index.js +251 -66
- package/lib/solvers/AvailableNetOrientationSolver/AvailableNetOrientationSolver.ts +58 -3
- package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/SchematicTraceSingleLineSolver2.ts +13 -5
- package/lib/solvers/TraceOverlapShiftSolver/TraceOverlapIssueSolver/TraceOverlapIssueSolver.ts +168 -24
- package/lib/solvers/TraceOverlapShiftSolver/TraceOverlapShiftSolver.ts +128 -48
- package/package.json +1 -1
- package/site/bug-reports/bug-report-20260716T144856Z.page.tsx +4 -0
- package/site/bug-reports/bug-report-20260717T022934Z.page.tsx +4 -0
- package/site/bug-reports/bug-report-20260717T031704Z.page.tsx +4 -0
- package/site/bug-reports/bug-report-20260717T042845Z.page.tsx +4 -0
- package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +3 -3
- package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +3 -3
- package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +5 -5
- package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +3 -3
- package/tests/bug-reports/bug-report-20260716T144856Z/__snapshots__/bug-report-20260716T144856Z.snap.svg +149 -0
- package/tests/bug-reports/bug-report-20260716T144856Z/bug-report-20260716T144856Z.json +693 -0
- package/tests/bug-reports/bug-report-20260716T144856Z/bug-report-20260716T144856Z.test.ts +12 -0
- package/tests/bug-reports/bug-report-20260717T022934Z/__snapshots__/bug-report-20260717T022934Z.snap.svg +130 -0
- package/tests/bug-reports/bug-report-20260717T022934Z/bug-report-20260717T022934Z.json +543 -0
- package/tests/bug-reports/bug-report-20260717T022934Z/bug-report-20260717T022934Z.test.ts +12 -0
- package/tests/bug-reports/bug-report-20260717T031704Z/__snapshots__/bug-report-20260717T031704Z.snap.svg +48 -0
- package/tests/bug-reports/bug-report-20260717T031704Z/bug-report-20260717T031704Z.json +77 -0
- package/tests/bug-reports/bug-report-20260717T031704Z/bug-report-20260717T031704Z.test.ts +12 -0
- package/tests/bug-reports/bug-report-20260717T042845Z/__snapshots__/bug-report-20260717T042845Z.snap.svg +54 -0
- package/tests/bug-reports/bug-report-20260717T042845Z/bug-report-20260717T042845Z.json +113 -0
- package/tests/bug-reports/bug-report-20260717T042845Z/bug-report-20260717T042845Z.test.ts +12 -0
- package/tests/examples/__snapshots__/example11.snap.svg +19 -19
- package/tests/examples/__snapshots__/example19.snap.svg +3 -5
- package/tests/examples/__snapshots__/example29.snap.svg +13 -13
- package/tests/examples/__snapshots__/example37.snap.svg +4 -2
- package/tests/examples/example16.test.ts +22 -0
- package/tests/repros/__snapshots__/repro-rp2040-gamepad-trace-alignment.snap.svg +2 -8
- package/tests/repros/__snapshots__/repro47-endpoint-obstacle-detour.snap.svg +19 -19
- package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +10 -10
- package/tests/repros/repro47-endpoint-obstacle-detour.test.ts +30 -0
- package/tests/solvers/TraceOverlapShiftSolver/TraceOverlapShiftSolver.test.ts +174 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-0.6000000000000001,0.1 -0.6000000000000001,-0.1" data-type="line" data-label="" points="213.9715237806725,494.81975159042713 213.9715237806725,528.748863980612" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.6000000000000001,0.1 -0.6599999999999999,2.36" data-type="line" data-label="" points="213.9715237806725,494.81975159042713 203.79279006361708,111.42078158133899" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.6000000000000001,-0.1 -0.6599999999999999,2.36" data-type="line" data-label="" points="213.9715237806725,528.748863980612 203.79279006361708,111.42078158133899" fill="none" stroke="hsl(27, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.6000000000000001,0.1 0.6000000000000001,-0.1" data-type="line" data-label="" points="417.5461981217813,494.81975159042713 417.5461981217813,528.748863980612" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.6000000000000001,0.1 0.6599999999999999,2.36" data-type="line" data-label="" points="417.5461981217813,494.81975159042713 427.7249318388367,111.42078158133899" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.6000000000000001,-0.1 0.6599999999999999,2.36" data-type="line" data-label="" points="417.5461981217813,528.748863980612 427.7249318388367,111.42078158133899" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.6000000000000001,-0.1 -0.8,-0.1 -0.8,0.1 -0.6000000000000001,0.1" data-type="line" data-label="" points="213.9715237806725,528.748863980612 180.0424113904877,528.748863980612 180.0424113904877,494.81975159042713 213.9715237806725,494.81975159042713" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.6599999999999999,2.36 -0.8599999999999999,2.36 -0.8599999999999999,0.1 -0.6000000000000001,0.1" data-type="line" data-label="" points="203.79279006361708,111.42078158133899 169.86367767343228,111.42078158133899 169.86367767343228,494.81975159042713 213.9715237806725,494.81975159042713" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.6000000000000001,0.1 1.4400000000000002,0.1 1.4400000000000002,-0.1 0.6000000000000001,-0.1" data-type="line" data-label="" points="417.5461981217813,494.81975159042713 560.0484701605575,494.81975159042713 560.0484701605575,528.748863980612 417.5461981217813,528.748863980612" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.6599999999999999,2.36 1.4400000000000002,2.36 1.4400000000000002,0.1 0.6000000000000001,0.1" data-type="line" data-label="" points="427.7249318388367,111.42078158133899 560.0484701605575,111.42078158133899 560.0484701605575,494.81975159042713 417.5461981217813,494.81975159042713" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8599999999999999,2.36 -1.15,2.36 -1.15,2.3609999999999998" data-type="line" data-label="" points="169.86367767343228,111.42078158133899 120.66646470766432,111.42078158133899 120.66646470766432,111.25113601938807" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="213.9715237806725" y="460.8906392002424" width="203.5746743411088" height="101.7873371705544" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.005894642857142856"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="2.32" x="203.79279006361708" y="46.95546803998786" width="223.93214177521963" height="142.50227203877614" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.005894642857142856"/></g><g><rect data-type="rect" data-label="5x20-BLX-A" data-x="0.4" data-y="-0.43000000000000005" x="281.8297485610421" y="569.4637988488337" width="203.5746743411088" height="30.536201151166324" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.005894642857142856"/></g><g><rect data-type="rect" data-label="FUSEX20MM" data-x="0.3400000000000001" data-y="0.41500000000000004" x="271.6510148439867" y="420.1757043320206" width="203.5746743411088" height="42.41139048773101" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.005894642857142856"/></g><g><rect data-type="rect" data-label="netId: VIN
|
|
2
|
+
globalConnNetId: connectivity_net0" data-x="-1.15" data-y="2.5709999999999997" x="79.95152983944257" y="39.99999999999997" width="81.4298697364435" height="71.25113601938807" fill="#ef444466" stroke="#ef4444" stroke-width="0.005894642857142856"/></g><g><rect data-type="rect" data-label="netId: VOUT
|
|
3
|
+
globalConnNetId: connectivity_net1" data-x="1.05" data-y="2.57" x="442.9930324144199" y="40.16964556195089" width="101.78733717055445" height="71.25113601938807" fill="#ef444466" stroke="#ef4444" stroke-width="0.005894642857142856"/></g><g><circle data-type="point" data-label="F1.1
|
|
4
|
+
x-" data-x="-0.6000000000000001" data-y="0.1" cx="213.9715237806725" cy="494.81975159042713" r="3" fill="hsl(214, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="F1.2
|
|
5
|
+
x-" data-x="-0.6000000000000001" data-y="-0.1" cx="213.9715237806725" cy="528.748863980612" r="3" fill="hsl(215, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="F1.4
|
|
6
|
+
x+" data-x="0.6000000000000001" data-y="0.1" cx="417.5461981217813" cy="494.81975159042713" r="3" fill="hsl(217, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="F1.3
|
|
7
|
+
x+" data-x="0.6000000000000001" data-y="-0.1" cx="417.5461981217813" cy="528.748863980612" r="3" fill="hsl(216, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="F2.1
|
|
8
|
+
x-" data-x="-0.6599999999999999" data-y="2.36" cx="203.79279006361708" cy="111.42078158133899" r="3" fill="hsl(95, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="F2.2
|
|
9
|
+
x+" data-x="0.6599999999999999" data-y="2.36" cx="427.7249318388367" cy="111.42078158133899" r="3" fill="hsl(96, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
10
|
+
orientation: y+" data-x="-1.15" data-y="2.3609999999999998" cx="120.66646470766432" cy="111.25113601938807" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
11
|
+
orientation: y+" data-x="1.05" data-y="2.36" cx="493.8867009996971" cy="111.42078158133899" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
|
|
12
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
13
|
+
const svg = e.currentTarget;
|
|
14
|
+
const rect = svg.getBoundingClientRect();
|
|
15
|
+
const x = e.clientX - rect.left;
|
|
16
|
+
const y = e.clientY - rect.top;
|
|
17
|
+
const crosshair = svg.getElementById('crosshair');
|
|
18
|
+
const h = svg.getElementById('crosshair-h');
|
|
19
|
+
const v = svg.getElementById('crosshair-v');
|
|
20
|
+
const coords = svg.getElementById('coordinates');
|
|
21
|
+
|
|
22
|
+
crosshair.style.display = 'block';
|
|
23
|
+
h.setAttribute('x1', '0');
|
|
24
|
+
h.setAttribute('x2', '640');
|
|
25
|
+
h.setAttribute('y1', y);
|
|
26
|
+
h.setAttribute('y2', y);
|
|
27
|
+
v.setAttribute('x1', x);
|
|
28
|
+
v.setAttribute('x2', x);
|
|
29
|
+
v.setAttribute('y1', '0');
|
|
30
|
+
v.setAttribute('y2', '640');
|
|
31
|
+
|
|
32
|
+
// Calculate real coordinates using inverse transformation
|
|
33
|
+
const matrix = {"a":169.645561950924,"c":0,"e":315.7588609512269,"b":0,"d":-169.645561950924,"f":511.78430778551956};
|
|
34
|
+
// Manually invert and apply the affine transform
|
|
35
|
+
// Since we only use translate and scale, we can directly compute:
|
|
36
|
+
// x' = (x - tx) / sx
|
|
37
|
+
// y' = (y - ty) / sy
|
|
38
|
+
const sx = matrix.a;
|
|
39
|
+
const sy = matrix.d;
|
|
40
|
+
const tx = matrix.e;
|
|
41
|
+
const ty = matrix.f;
|
|
42
|
+
const realPoint = {
|
|
43
|
+
x: (x - tx) / sx,
|
|
44
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
48
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
49
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
50
|
+
});
|
|
51
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
52
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
53
|
+
});
|
|
54
|
+
]]></script></svg>
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chips": [
|
|
3
|
+
{
|
|
4
|
+
"chipId": "schematic_component_0",
|
|
5
|
+
"center": {
|
|
6
|
+
"x": 0,
|
|
7
|
+
"y": 0
|
|
8
|
+
},
|
|
9
|
+
"width": 1.2000000000000002,
|
|
10
|
+
"height": 0.6000000000000001,
|
|
11
|
+
"pins": [
|
|
12
|
+
{
|
|
13
|
+
"pinId": "F1.1",
|
|
14
|
+
"x": -0.6000000000000001,
|
|
15
|
+
"y": 0.1
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"pinId": "F1.2",
|
|
19
|
+
"x": -0.6000000000000001,
|
|
20
|
+
"y": -0.1
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"pinId": "F1.4",
|
|
24
|
+
"x": 0.6000000000000001,
|
|
25
|
+
"y": 0.1
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"pinId": "F1.3",
|
|
29
|
+
"x": 0.6000000000000001,
|
|
30
|
+
"y": -0.1
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"chipId": "schematic_component_1",
|
|
36
|
+
"center": {
|
|
37
|
+
"x": 0,
|
|
38
|
+
"y": 2.32
|
|
39
|
+
},
|
|
40
|
+
"width": 1.3199999999999998,
|
|
41
|
+
"height": 0.8399999999999999,
|
|
42
|
+
"pins": [
|
|
43
|
+
{
|
|
44
|
+
"pinId": "F2.1",
|
|
45
|
+
"x": -0.6599999999999999,
|
|
46
|
+
"y": 2.36,
|
|
47
|
+
"_facingDirection": "x-"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"pinId": "F2.2",
|
|
51
|
+
"x": 0.6599999999999999,
|
|
52
|
+
"y": 2.36,
|
|
53
|
+
"_facingDirection": "x+"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"directConnections": [],
|
|
59
|
+
"netConnections": [
|
|
60
|
+
{
|
|
61
|
+
"netId": "VIN",
|
|
62
|
+
"pinIds": [
|
|
63
|
+
"F1.1",
|
|
64
|
+
"F1.2",
|
|
65
|
+
"F2.1"
|
|
66
|
+
],
|
|
67
|
+
"netLabelWidth": 0.42,
|
|
68
|
+
"netLabelHeight": 0.48
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"netId": "VOUT",
|
|
72
|
+
"pinIds": [
|
|
73
|
+
"F1.4",
|
|
74
|
+
"F1.3",
|
|
75
|
+
"F2.2"
|
|
76
|
+
],
|
|
77
|
+
"netLabelWidth": 0.42,
|
|
78
|
+
"netLabelHeight": 0.6
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"textBoxes": [
|
|
82
|
+
{
|
|
83
|
+
"chipId": "schematic_component_0",
|
|
84
|
+
"center": {
|
|
85
|
+
"x": 0.4,
|
|
86
|
+
"y": -0.43000000000000005
|
|
87
|
+
},
|
|
88
|
+
"width": 1.2,
|
|
89
|
+
"height": 0.17999999999999994,
|
|
90
|
+
"text": "5x20-BLX-A"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"chipId": "schematic_component_0",
|
|
94
|
+
"center": {
|
|
95
|
+
"x": 0.3400000000000001,
|
|
96
|
+
"y": 0.41500000000000004
|
|
97
|
+
},
|
|
98
|
+
"width": 1.2000000000000002,
|
|
99
|
+
"height": 0.25,
|
|
100
|
+
"text": "FUSEX20MM"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"availableNetLabelOrientations": {
|
|
104
|
+
"VIN": [
|
|
105
|
+
"y+"
|
|
106
|
+
],
|
|
107
|
+
"VOUT": [
|
|
108
|
+
"y+"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
"maxMspPairDistance": 2.4,
|
|
112
|
+
"_hideRatsNet": false
|
|
113
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { expect, test } from "bun:test"
|
|
2
|
+
import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
|
|
3
|
+
import inputProblem from "./bug-report-20260717T042845Z.json"
|
|
4
|
+
import "tests/fixtures/matcher"
|
|
5
|
+
|
|
6
|
+
test("bug-report-20260717T042845Z", () => {
|
|
7
|
+
const solver = new SchematicTracePipelineSolver(inputProblem as any)
|
|
8
|
+
|
|
9
|
+
solver.solve()
|
|
10
|
+
|
|
11
|
+
expect(solver).toMatchSolverSnapshot(import.meta.path)
|
|
12
|
+
})
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="0.48,0.765 -0.48,-0.765" data-type="line" data-label="" points="
|
|
2
|
-
globalConnNetId: connectivity_net2" data-x="0.31500000000000006" data-y="-0.44000000000000006" x="
|
|
3
|
-
globalConnNetId: connectivity_net3" data-x="1.68" data-y="-0.89" x="
|
|
4
|
-
globalConnNetId: connectivity_net0" data-x="0.
|
|
5
|
-
globalConnNetId: connectivity_net1" data-x="
|
|
6
|
-
x-" data-x="-1.58" data-y="0.765" cx="
|
|
7
|
-
x+" data-x="-0.48" data-y="0.765" cx="
|
|
8
|
-
x-" data-x="0.48" data-y="0.765" cx="
|
|
9
|
-
x+" data-x="1.58" data-y="0.765" cx="
|
|
10
|
-
x-" data-x="-1.58" data-y="-0.765" cx="
|
|
11
|
-
x+" data-x="-0.48" data-y="-0.765" cx="
|
|
12
|
-
x-" data-x="0.5800000000000001" data-y="-0.665" cx="
|
|
13
|
-
y-" data-x="1.03" data-y="-1.03" cx="
|
|
14
|
-
x+" data-x="1.48" data-y="-0.665" cx="
|
|
15
|
-
orientation: y+" data-x="0.31500000000000006" data-y="-0.665" cx="
|
|
16
|
-
orientation: y-" data-x="1.68" data-y="-0.665" cx="
|
|
17
|
-
orientation: y
|
|
18
|
-
orientation:
|
|
1
|
+
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="0.48,0.765 -0.48,-0.765" data-type="line" data-label="" points="361.5571776155718,215.76642335766422 230.75425790754258,424.2335766423358" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.58,0.765 -1.58,-0.765" data-type="line" data-label="" points="511.43552311435525,215.76642335766422 80.87591240875912,424.2335766423358" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="0.5800000000000001,-0.665 -1.58,0.765" data-type="line" data-label="" points="375.18248175182487,410.6082725060827 80.87591240875912,215.76642335766422" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.48,-0.665 -0.48,0.765" data-type="line" data-label="" points="497.81021897810217,410.6082725060827 230.75425790754258,215.76642335766422" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="0.48,0.765 0,0.765 0,-0.765 -0.48,-0.765" data-type="line" data-label="" points="361.5571776155718,215.76642335766422 296.1557177615572,215.76642335766422 296.1557177615572,424.2335766423358 230.75425790754258,424.2335766423358" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.58,0.765 1.7800000000000002,0.765 1.7800000000000002,0 -1.68,0 -1.68,-0.765 -1.58,-0.765" data-type="line" data-label="" points="511.43552311435525,215.76642335766422 538.6861313868613,215.76642335766422 538.6861313868613,320 67.2506082725061,320 67.2506082725061,424.2335766423358 80.87591240875912,424.2335766423358" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.5800000000000001,-0.665 0.050000000000000044,-0.665 0.050000000000000044,-1.1594553499999996 -1.8800000000000001,-1.1594553499999996 -1.8800000000000001,0.765 -1.58,0.765" data-type="line" data-label="" points="375.18248175182487,410.6082725060827 302.9683698296837,410.6082725060827 302.9683698296837,477.9793177615571 40,477.9793177615571 40,215.76642335766422 80.87591240875912,215.76642335766422" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.48,-0.665 1.68,-0.665 1.68,1.1594553499999996 -0.1,1.1594553499999996 -0.1,0.765 -0.48,0.765" data-type="line" data-label="" points="497.81021897810217,410.6082725060827 525.0608272506083,410.6082725060827 525.0608272506083,162.02068223844287 282.53041362530416,162.02068223844287 282.53041362530416,215.76642335766422 230.75425790754258,215.76642335766422" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-1.03" data-y="0.765" x="80.87591240875912" y="189.27129051094897" width="149.87834549878346" height="52.9902656934305" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="1.03" data-y="0.765" x="361.5571776155718" y="189.27129051094897" width="149.87834549878346" height="52.9902656934305" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-1.03" data-y="-0.765" x="80.87591240875912" y="397.7384437956205" width="149.87834549878346" height="52.9902656934305" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="1.03" data-y="-0.765" x="375.18248175182487" y="388.1265206812652" width="122.6277372262773" height="72.21411192214111" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="netId: .J1 > .pin1 to .R1 > .pin1
|
|
2
|
+
globalConnNetId: connectivity_net2" data-x="0.31500000000000006" data-y="-0.44000000000000006" x="325.45012165450123" y="349.29440389294405" width="27.2506082725061" height="61.31386861313865" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="netId: .J1 > .pin3 to .R1 > .pin2
|
|
3
|
+
globalConnNetId: connectivity_net3" data-x="1.68" data-y="-0.89" x="511.43552311435525" y="410.6082725060827" width="27.250608272506156" height="61.31386861313871" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="netId: .R2 > .pin1 to .R3 > .pin2
|
|
4
|
+
globalConnNetId: connectivity_net0" data-x="0.24" data-y="0.54" x="315.23114355231144" y="215.76642335766422" width="27.2506082725061" height="61.31386861313871" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007339285714285715"/></g><g><rect data-type="rect" data-label="netId: .R2 > .pin2 to .R3 > .pin1
|
|
5
|
+
globalConnNetId: connectivity_net1" data-x="2.0050000000000003" data-y="0.765" x="538.6861313868615" y="202.1411192214112" width="61.31386861313865" height="27.25060827250607" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007339285714285715"/></g><g><circle data-type="point" data-label="R1.1
|
|
6
|
+
x-" data-x="-1.58" data-y="0.765" cx="80.87591240875912" cy="215.76642335766422" r="3" fill="hsl(226, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.2
|
|
7
|
+
x+" data-x="-0.48" data-y="0.765" cx="230.75425790754258" cy="215.76642335766422" r="3" fill="hsl(227, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R2.1
|
|
8
|
+
x-" data-x="0.48" data-y="0.765" cx="361.5571776155718" cy="215.76642335766422" r="3" fill="hsl(107, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R2.2
|
|
9
|
+
x+" data-x="1.58" data-y="0.765" cx="511.43552311435525" cy="215.76642335766422" r="3" fill="hsl(108, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R3.1
|
|
10
|
+
x-" data-x="-1.58" data-y="-0.765" cx="80.87591240875912" cy="424.2335766423358" r="3" fill="hsl(348, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R3.2
|
|
11
|
+
x+" data-x="-0.48" data-y="-0.765" cx="230.75425790754258" cy="424.2335766423358" r="3" fill="hsl(349, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="J1.1
|
|
12
|
+
x-" data-x="0.5800000000000001" data-y="-0.665" cx="375.18248175182487" cy="410.6082725060827" r="3" fill="hsl(218, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="J1.2
|
|
13
|
+
y-" data-x="1.03" data-y="-1.03" cx="436.4963503649635" cy="460.34063260340633" r="3" fill="hsl(219, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="J1.3
|
|
14
|
+
x+" data-x="1.48" data-y="-0.665" cx="497.81021897810217" cy="410.6082725060827" r="3" fill="hsl(220, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
15
|
+
orientation: y+" data-x="0.31500000000000006" data-y="-0.665" cx="339.07542579075425" cy="410.6082725060827" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
16
|
+
orientation: y-" data-x="1.68" data-y="-0.665" cx="525.0608272506083" cy="410.6082725060827" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
17
|
+
orientation: y-" data-x="0.24" data-y="0.765" cx="328.85644768856446" cy="215.76642335766422" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
18
|
+
orientation: x+" data-x="1.7800000000000002" data-y="0.765" cx="538.6861313868613" cy="215.76642335766422" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
|
|
19
19
|
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
20
20
|
const svg = e.currentTarget;
|
|
21
21
|
const rect = svg.getBoundingClientRect();
|
|
@@ -37,7 +37,7 @@ orientation: y+" data-x="1.7800000000000002" data-y="0.765" cx="585.106382978723
|
|
|
37
37
|
v.setAttribute('y2', '640');
|
|
38
38
|
|
|
39
39
|
// Calculate real coordinates using inverse transformation
|
|
40
|
-
const matrix = {"a":
|
|
40
|
+
const matrix = {"a":136.2530413625304,"c":0,"e":296.1557177615572,"b":0,"d":-136.2530413625304,"f":320};
|
|
41
41
|
// Manually invert and apply the affine transform
|
|
42
42
|
// Since we only use translate and scale, we can directly compute:
|
|
43
43
|
// x' = (x - tx) / sx
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.4002733499999995,-0.0012093000000001908 0.6000000000000001,0" data-type="line" data-label="" points="240.027335,339.4329900000001 160.00000000000003,339.31206000000003" fill="none" stroke="hsl(256, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.3997266500000003,1.1012093000000003 2.1487092999999997,1.3002732499999994" data-type="line" data-label="" points="239.97266500000006,229.19113 314.87093,209.2847350000001" fill="none" stroke="hsl(256, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.1487092999999997,1.3002732499999994 0.6000000000000001,0.2" data-type="line" data-label="" points="314.87093,209.2847350000001 160.00000000000003,319.31206000000003" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.8000000000000003,0 3.2512907000000006,1.2997267500000007" data-type="line" data-label="" points="480,339.31206000000003 425.12907000000007,209.33938499999996" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.8000000000000003,-0.9 3.2512907000000006,1.2997267500000007" data-type="line" data-label="" points="480,429.31206000000003 425.12907000000007,209.33938499999996" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.0034928,-0.8350319000000007 0.6000000000000001,-0.2" data-type="line" data-label="" points="300.34928,422.8152500000001 160.00000000000003,359.31206000000003" fill="none" stroke="hsl(352, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.2512907000000006,1.2997267500000007 3.8000000000000003,0" data-type="line" data-label="" points="425.12907000000007,209.33938499999996 480,339.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.2512907000000006,1.2997267500000007 3.8000000000000003,-0.9" data-type="line" data-label="" points="425.12907000000007,209.33938499999996 480,429.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.8000000000000003,0 3.8000000000000003,-0.9" data-type="line" data-label="" points="480,339.31206000000003 480,429.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.4002733499999995,-0.0012093000000001908 1.4002733499999995,-0.
|
|
2
|
-
globalConnNetId: connectivity_net3" data-x="2.2284928" data-y="-0.
|
|
3
|
-
globalConnNetId: connectivity_net0" data-x="1.6252733499999996" data-y="-0.30120930000000024" x="240.027335" y="359.4329900000001" width="45" height="20" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="netId: resistor.R1 > port.pin1 to .U1 > .pin1
|
|
1
|
+
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.4002733499999995,-0.0012093000000001908 0.6000000000000001,0" data-type="line" data-label="" points="240.027335,339.4329900000001 160.00000000000003,339.31206000000003" fill="none" stroke="hsl(256, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.3997266500000003,1.1012093000000003 2.1487092999999997,1.3002732499999994" data-type="line" data-label="" points="239.97266500000006,229.19113 314.87093,209.2847350000001" fill="none" stroke="hsl(256, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.1487092999999997,1.3002732499999994 0.6000000000000001,0.2" data-type="line" data-label="" points="314.87093,209.2847350000001 160.00000000000003,319.31206000000003" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.8000000000000003,0 3.2512907000000006,1.2997267500000007" data-type="line" data-label="" points="480,339.31206000000003 425.12907000000007,209.33938499999996" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.8000000000000003,-0.9 3.2512907000000006,1.2997267500000007" data-type="line" data-label="" points="480,429.31206000000003 425.12907000000007,209.33938499999996" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.0034928,-0.8350319000000007 0.6000000000000001,-0.2" data-type="line" data-label="" points="300.34928,422.8152500000001 160.00000000000003,359.31206000000003" fill="none" stroke="hsl(352, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.2512907000000006,1.2997267500000007 3.8000000000000003,0" data-type="line" data-label="" points="425.12907000000007,209.33938499999996 480,339.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.2512907000000006,1.2997267500000007 3.8000000000000003,-0.9" data-type="line" data-label="" points="425.12907000000007,209.33938499999996 480,429.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3.8000000000000003,0 3.8000000000000003,-0.9" data-type="line" data-label="" points="480,339.31206000000003 480,429.31206000000003" fill="none" stroke="hsl(123, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.4002733499999995,-0.0012093000000001908 1.4002733499999995,-0.1012093000000002 1.0001366749999998,-0.1012093000000002 1.0001366749999998,0 0.6000000000000001,0" data-type="line" data-label="" points="240.027335,339.4329900000001 240.027335,349.4329900000001 200.0136675,349.4329900000001 200.0136675,339.31206000000003 160.00000000000003,339.31206000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.1487092999999997,1.3002732499999994 1.3997266500000003,1.3002732499999994 1.3997266500000003,1.1012093000000003" data-type="line" data-label="" points="314.87093,209.2847350000001 239.97266500000006,209.2847350000001 239.97266500000006,229.19113" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.6000000000000001,0.2 0.9998633250000002,0.2 0.9998633250000002,1.3012093000000002 1.3997266500000003,1.3012093000000002 1.3997266500000003,1.1012093000000003" data-type="line" data-label="" points="160.00000000000003,319.31206000000003 199.98633250000006,319.31206000000003 199.98633250000006,209.19113000000002 239.97266500000006,209.19113000000002 239.97266500000006,229.19113" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.8000000000000003,-0.9 3.6000000000000005,-0.9 3.6000000000000005,0 3.8000000000000003,0" data-type="line" data-label="" points="480,429.31206000000003 460.0000000000001,429.31206000000003 460.0000000000001,339.31206000000003 480,339.31206000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.2512907000000006,1.2997267500000007 3.5256453500000005,1.2997267500000007 3.5256453500000005,0 3.8000000000000003,0" data-type="line" data-label="" points="425.12907000000007,209.33938499999996 452.5645350000001,209.33938499999996 452.5645350000001,339.31206000000003 480,339.31206000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.0034928,-0.8350319000000007 2.0034928,-0.2 0.6000000000000001,-0.2" data-type="line" data-label="" points="300.34928,422.8152500000001 300.34928,359.31206000000003 160.00000000000003,359.31206000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40.00000000000003" y="299.31206000000003" width="120" height="80" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="1.4" data-y="0.55" x="213.54167" y="229.19113" width="52.916660000000036" height="110.24186000000009" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="2.7" data-y="1.3" x="314.87092999999993" y="189.86652500000008" width="110.25814000000008" height="38.8910699999999" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="4.4" data-y="0" x="480.0000000000001" y="319.31206000000003" width="120" height="40" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="4.4" data-y="-0.9" x="480.0000000000001" y="409.31206000000003" width="120" height="40" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="2" data-y="-1.1" x="255.41992" y="422.8152500000001" width="89.16015999999999" height="52.99361999999985" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="netId: solderjumper.JP8 > port.pin2 to .U1 > .pin6
|
|
2
|
+
globalConnNetId: connectivity_net3" data-x="2.2284928" data-y="-0.5175159500000004" x="300.34928" y="381.06365500000004" width="45" height="19.999999999999943" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="netId: resistor.R1 > port.pin1 to .U1 > .pin1
|
|
4
3
|
globalConnNetId: connectivity_net1" data-x="1.3997266500000003" data-y="1.5262093000000003" x="229.97266500000006" y="164.19113" width="20.00000000000003" height="45.00000000000003" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01"/></g><g><rect data-type="rect" data-label="netId: PAD
|
|
5
4
|
globalConnNetId: connectivity_net2" data-x="3.3884680250000008" data-y="1.5247267500000008" x="428.8468025000001" y="164.33938499999994" width="20" height="45.00000000000003" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01"/></g><g><circle data-type="point" data-label="U1.6
|
|
6
5
|
x+" data-x="0.6000000000000001" data-y="-0.2" cx="160.00000000000003" cy="359.31206000000003" r="3" fill="hsl(324, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.8
|
|
@@ -15,8 +14,7 @@ x-" data-x="3.8000000000000003" data-y="-0.9" cx="480" cy="429.31206000000003" r
|
|
|
15
14
|
x+" data-x="2.4458007999999998" data-y="-1.2015872704999997" cx="344.58008" cy="459.47078705" r="3" fill="hsl(245, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="JP8.2
|
|
16
15
|
y+" data-x="2.0034928" data-y="-0.8350319000000007" cx="300.34928" cy="422.8152500000001" r="3" fill="hsl(246, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="JP8.3
|
|
17
16
|
x-" data-x="1.5541992" data-y="-1.2014628704999997" cx="255.41992000000002" cy="459.45834705" r="3" fill="hsl(247, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
18
|
-
orientation: x+" data-x="2.0034928" data-y="-0.
|
|
19
|
-
orientation: x+" data-x="1.4002733499999995" data-y="-0.30120930000000024" cx="240.027335" cy="369.4329900000001" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
17
|
+
orientation: x+" data-x="2.0034928" data-y="-0.5175159500000004" cx="300.34928" cy="391.06365500000004" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
20
18
|
orientation: y+" data-x="1.3997266500000003" data-y="1.3012093000000002" cx="239.97266500000006" cy="209.19113000000002" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
21
19
|
orientation: y+" data-x="3.3884680250000008" data-y="1.2997267500000007" cx="438.8468025000001" cy="209.33938499999996" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
|
|
22
20
|
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|