@tscircuit/schematic-trace-solver 0.0.174 → 0.0.175
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 +2 -0
- package/dist/index.js +195 -74
- package/lib/solvers/InlineNetLabelSolver/InlineNetLabelSolver.ts +16 -1
- package/lib/solvers/InlineNetLabelSolver/restoreReroutesAroundSupersededLabels.ts +174 -0
- package/lib/solvers/NetLabelToTraceSolver/NetLabelToTraceSolver.ts +2 -30
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +9 -0
- package/lib/utils/doesPathCoincideWithTraces.ts +17 -4
- package/lib/utils/pathIntersectsRenderedLabel.ts +33 -0
- package/package.json +1 -1
- package/site/bug-reports/bug-report-20260901T055358Z.page.tsx +4 -0
- package/site/bug-reports/bug-report-20260901T064117Z.page.tsx +4 -0
- package/site/bug-reports/bug-report-20260901T134241Z.page.tsx +4 -0
- package/tests/bug-reports/bug-report-20260901T055358Z/__snapshots__/bug-report-20260901T055358Z.snap.svg +676 -0
- package/tests/bug-reports/bug-report-20260901T055358Z/bug-report-20260901T055358Z.json +2467 -0
- package/tests/bug-reports/bug-report-20260901T055358Z/bug-report-20260901T055358Z.test.ts +59 -0
- package/tests/bug-reports/bug-report-20260901T064117Z/__snapshots__/bug-report-20260901T064117Z.snap.svg +134 -0
- package/tests/bug-reports/bug-report-20260901T064117Z/bug-report-20260901T064117Z.json +215 -0
- package/tests/bug-reports/bug-report-20260901T064117Z/bug-report-20260901T064117Z.test.ts +12 -0
- package/tests/bug-reports/bug-report-20260901T134241Z/__snapshots__/bug-report-20260901T134241Z.snap.svg +115 -0
- package/tests/bug-reports/bug-report-20260901T134241Z/bug-report-20260901T134241Z.json +359 -0
- package/tests/bug-reports/bug-report-20260901T134241Z/bug-report-20260901T134241Z.test.ts +12 -0
- package/tests/repros/__snapshots__/repro-trellis-core-gnd-net-label-overlap.snap.svg +134 -0
- package/tests/repros/__snapshots__/repro-wireless-mouse-charger-section.snap.svg +164 -0
- package/tests/repros/assets/repro-trellis-core-gnd-net-label-overlap.input.json +178 -0
- package/tests/repros/assets/repro-wireless-mouse-charger-section.input.json +591 -0
- package/tests/repros/repro-trellis-core-gnd-net-label-overlap.test.ts +73 -0
- package/tests/repros/repro-wireless-mouse-charger-section.test.ts +16 -0
- package/tests/solvers/InlineNetLabelSolver/restore-reroutes-around-superseded-labels.test.ts +186 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { expect, test } from "bun:test"
|
|
2
|
+
import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
|
|
3
|
+
import inputProblem from "./bug-report-20260901T055358Z.json"
|
|
4
|
+
import "tests/fixtures/matcher"
|
|
5
|
+
|
|
6
|
+
test("bug-report-20260901T055358Z", () => {
|
|
7
|
+
const solver = new SchematicTracePipelineSolver(inputProblem as any)
|
|
8
|
+
|
|
9
|
+
solver.solve()
|
|
10
|
+
|
|
11
|
+
const groundLabelConnectorId = "available-net-orientation-19-GND"
|
|
12
|
+
const preAlignmentOutput =
|
|
13
|
+
solver.preAlignmentNetLabelTraceCollisionSolver!.getOutput()
|
|
14
|
+
const groundLabelConnector = preAlignmentOutput.traces.find(
|
|
15
|
+
(trace) => trace.mspPairId === groundLabelConnectorId,
|
|
16
|
+
)
|
|
17
|
+
const cc2Label = preAlignmentOutput.netLabelPlacements.find(
|
|
18
|
+
(label) => label.netId === "CC2",
|
|
19
|
+
)
|
|
20
|
+
const groundReroute = preAlignmentOutput.completedReroutes.find(
|
|
21
|
+
(reroute) => reroute.initialTrace.mspPairId === groundLabelConnectorId,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
// The anchored CC2 fallback temporarily forces a detour. Once inline
|
|
25
|
+
// conversion succeeds and supersedes that fallback, its exact reroute is
|
|
26
|
+
// safely unwound instead of changing CC2's orientation.
|
|
27
|
+
expect(cc2Label?.orientation).toBe("y+")
|
|
28
|
+
expect(groundReroute).toBeDefined()
|
|
29
|
+
expect(groundLabelConnector).toBeDefined()
|
|
30
|
+
expect(groundLabelConnector!.tracePath.length).toBeGreaterThan(2)
|
|
31
|
+
|
|
32
|
+
const inlineOutput = solver.inlineNetLabelSolver!.getOutput()
|
|
33
|
+
const restoredGroundLabelConnector = inlineOutput.traces.find(
|
|
34
|
+
(trace) => trace.mspPairId === groundLabelConnectorId,
|
|
35
|
+
)
|
|
36
|
+
expect(
|
|
37
|
+
inlineOutput.netLabelPlacements.some((label) => label.netId === "CC2"),
|
|
38
|
+
).toBe(false)
|
|
39
|
+
expect(
|
|
40
|
+
inlineOutput.inlineNetLabelPlacements.some(
|
|
41
|
+
(label) => label.netId === "CC2",
|
|
42
|
+
),
|
|
43
|
+
).toBe(true)
|
|
44
|
+
expect(restoredGroundLabelConnector?.tracePath).toEqual(
|
|
45
|
+
groundReroute!.initialTrace.tracePath,
|
|
46
|
+
)
|
|
47
|
+
expect(
|
|
48
|
+
solver.inlineNetLabelSolver!.stats.restoredSupersededLabelRerouteCount,
|
|
49
|
+
).toBe(1)
|
|
50
|
+
|
|
51
|
+
const finalGroundLabelConnector = solver
|
|
52
|
+
.netLabelToTraceSolver!.getOutput()
|
|
53
|
+
.traces.find((trace) => trace.mspPairId === groundLabelConnectorId)
|
|
54
|
+
expect(finalGroundLabelConnector?.tracePath).toEqual(
|
|
55
|
+
restoredGroundLabelConnector?.tracePath,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
expect(solver).toMatchSolverSnapshot(import.meta.path)
|
|
59
|
+
})
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<svg width="1200" height="2016" viewBox="0 0 1200 2016" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on top and Circuit JSON schematic on the bottom">
|
|
2
|
+
<g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
|
|
3
|
+
<rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.9,-0.5 8,5.38" data-type="line" data-label="" points="222.1917808219178,424.5445205479452 514.6575342465753,142.6267123287671" fill="none" stroke="hsl(211, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.3 7.25,-0.6200000000000001" data-type="line" data-label="" points="222.1917808219178,414.95547945205476 478.69863013698625,430.29794520547944" fill="none" stroke="hsl(88, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 1.9,0.30000000000000004" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 222.1917808219178,386.18835616438355" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 1.9,0.5" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 222.1917808219178,376.5993150684931" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 9,-1.38" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 8,4.62" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 1.9,0.5" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 222.1917808219178,376.5993150684931" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 9,-1.38" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 8,4.62" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 9,-1.38" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 8,4.62" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.25,-1.38 9,-1.38" data-type="line" data-label="" points="478.69863013698625,466.736301369863 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.25,-1.38 8,4.62" data-type="line" data-label="" points="478.69863013698625,466.736301369863 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9,-1.38 8,4.62" data-type="line" data-label="" points="562.6027397260274,466.736301369863 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.10000000000000009 9,-0.6200000000000001" data-type="line" data-label="" points="222.1917808219178,395.777397260274 562.6027397260274,430.29794520547944" fill="none" stroke="hsl(88, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 2.421,0.5 2.421,0.30000000000000004 1.9,0.30000000000000004" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 247.17123287671234,376.5993150684931 247.17123287671234,386.18835616438355 222.1917808219178,386.18835616438355" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.25,-1.38 7.25,-1.58 9,-1.58 9,-1.38" data-type="line" data-label="" points="478.69863013698625,466.736301369863 478.69863013698625,476.3253424657534 562.6027397260274,476.3253424657534 562.6027397260274,466.736301369863" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.30000000000000004 2.421,0.3000000000000001 2.421,-0.09999999999999992 1.9,-0.09999999999999998" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 247.17123287671234,386.18835616438355 247.17123287671234,405.36643835616434 222.1917808219178,405.36643835616434" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8,5.38 8,5.481 7.5489999999999995,5.481" data-type="line" data-label="" points="514.6575342465753,142.6267123287671 514.6575342465753,137.78424657534242 493.0342465753424,137.78424657534242" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.10000000000000009 3.2309999999999994,0.10000000000000009 3.2309999999999994,0.15100000000000008" data-type="line" data-label="" points="222.1917808219178,395.777397260274 286.0068493150685,395.777397260274 286.0068493150685,393.3321917808219" 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" y="304.68150684931504" width="182.1917808219178" height="191.78082191780823" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="7.3825" data-y="-1" x="457.12328767123296" y="430.29794520547944" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="9.1325" data-y="-1" x="541.027397260274" y="430.29794520547944" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="8.1325" data-y="5" x="493.08219178082203" y="142.6267123287671" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="T113-S3" data-x="-1.08" data-y="-2.13" x="59.17808219178082" y="498.3801369863014" width="40.27397260273972" height="8.630136986301352" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="U3" data-x="-1.38" data-y="2.1149999999999998" x="56.30136986301369" y="293.17465753424653" width="17.26027397260276" height="11.986301369863043" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: P1V8
|
|
4
|
+
globalConnNetId: connectivity_net0" data-x="2.2009999999999996" data-y="-0.5" x="222.23972602739724" y="419.75" width="28.76712328767121" height="9.589041095890366" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: P1V8
|
|
5
|
+
globalConnNetId: connectivity_net0" data-x="7.249" data-y="5.481" x="464.2671232876712" y="132.98972602739724" width="28.76712328767121" height="9.589041095890366" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA2
|
|
6
|
+
globalConnNetId: connectivity_net1" data-x="2.1109999999999998" data-y="-0.3" x="222.23972602739727" y="410.1609589041095" width="20.13698630136986" height="9.589041095890423" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA2
|
|
7
|
+
globalConnNetId: connectivity_net1" data-x="7.25" data-y="-0.40900000000000014" x="441.3013698630137" y="410.1130136986301" width="74.79452054794513" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
8
|
+
globalConnNetId: connectivity_net2" data-x="2.421" data-y="-0.30999999999999994" x="235.66438356164386" y="405.3664383561644" width="23.013698630136957" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
9
|
+
globalConnNetId: connectivity_net2" data-x="7.25" data-y="-1.79" x="467.1917808219178" y="476.32534246575335" width="23.0136986301369" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
10
|
+
globalConnNetId: connectivity_net2" data-x="8" data-y="4.409" x="503.1506849315068" y="179.1130136986301" width="23.013698630137014" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA1
|
|
11
|
+
globalConnNetId: connectivity_net3" data-x="3.2309999999999994" data-y="0.3610000000000001" x="248.60958904109592" y="373.19520547945206" width="74.79452054794518" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA1
|
|
12
|
+
globalConnNetId: connectivity_net3" data-x="9" data-y="-0.40900000000000014" x="525.2054794520548" y="410.1130136986301" width="74.79452054794513" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><circle data-type="point" data-label="AVCC
|
|
13
|
+
x+" data-x="1.9" data-y="-0.5" cx="222.1917808219178" cy="424.5445205479452" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VRA2
|
|
14
|
+
x+" data-x="1.9" data-y="-0.3" cx="222.1917808219178" cy="414.95547945205476" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="AGND
|
|
15
|
+
x+" data-x="1.9" data-y="-0.09999999999999998" cx="222.1917808219178" cy="405.36643835616434" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VRA1
|
|
16
|
+
x+" data-x="1.9" data-y="0.10000000000000009" cx="222.1917808219178" cy="395.777397260274" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="FMINR
|
|
17
|
+
x+" data-x="1.9" data-y="0.30000000000000004" cx="222.1917808219178" cy="386.18835616438355" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="FMINL
|
|
18
|
+
x+" data-x="1.9" data-y="0.5" cx="222.1917808219178" cy="376.5993150684931" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
|
|
19
|
+
y+" data-x="7.25" data-y="-0.6200000000000001" cx="478.69863013698625" cy="430.29794520547944" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
|
|
20
|
+
y-" data-x="7.25" data-y="-1.38" cx="478.69863013698625" cy="466.736301369863" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
|
|
21
|
+
y+" data-x="9" data-y="-0.6200000000000001" cx="562.6027397260274" cy="430.29794520547944" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
|
|
22
|
+
y-" data-x="9" data-y="-1.38" cx="562.6027397260274" cy="466.736301369863" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
|
|
23
|
+
y+" data-x="8" data-y="5.38" cx="514.6575342465753" cy="142.6267123287671" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
|
|
24
|
+
y-" data-x="8" data-y="4.62" cx="514.6575342465753" cy="179.06506849315065" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
25
|
+
orientation: x+" data-x="1.9" data-y="-0.5" cx="222.1917808219178" cy="424.5445205479452" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
26
|
+
orientation: x-" data-x="7.5489999999999995" data-y="5.481" cx="493.0342465753424" cy="137.78424657534242" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
27
|
+
orientation: x+" data-x="1.9" data-y="-0.3" cx="222.1917808219178" cy="414.95547945205476" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
28
|
+
orientation: y+" data-x="7.25" data-y="-0.6200000000000001" cx="478.69863013698625" cy="430.29794520547944" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
29
|
+
orientation: y-" data-x="2.421" data-y="-0.09999999999999992" cx="247.17123287671234" cy="405.36643835616434" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
30
|
+
orientation: y-" data-x="7.25" data-y="-1.58" cx="478.69863013698625" cy="476.3253424657534" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
31
|
+
orientation: y-" data-x="8" data-y="4.62" cx="514.6575342465753" cy="179.06506849315065" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
32
|
+
orientation: y+" data-x="3.2309999999999994" data-y="0.15100000000000008" cx="286.0068493150685" cy="393.3321917808219" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
33
|
+
orientation: y+" data-x="9" data-y="-0.6200000000000001" cx="562.6027397260274" cy="430.29794520547944" 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[
|
|
34
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
35
|
+
const svg = e.currentTarget;
|
|
36
|
+
const rect = svg.getBoundingClientRect();
|
|
37
|
+
const x = e.clientX - rect.left;
|
|
38
|
+
const y = e.clientY - rect.top;
|
|
39
|
+
const crosshair = svg.getElementById('crosshair');
|
|
40
|
+
const h = svg.getElementById('crosshair-h');
|
|
41
|
+
const v = svg.getElementById('crosshair-v');
|
|
42
|
+
const coords = svg.getElementById('coordinates');
|
|
43
|
+
|
|
44
|
+
crosshair.style.display = 'block';
|
|
45
|
+
h.setAttribute('x1', '0');
|
|
46
|
+
h.setAttribute('x2', '640');
|
|
47
|
+
h.setAttribute('y1', y);
|
|
48
|
+
h.setAttribute('y2', y);
|
|
49
|
+
v.setAttribute('x1', x);
|
|
50
|
+
v.setAttribute('x2', x);
|
|
51
|
+
v.setAttribute('y1', '0');
|
|
52
|
+
v.setAttribute('y2', '640');
|
|
53
|
+
|
|
54
|
+
// Calculate real coordinates using inverse transformation
|
|
55
|
+
const matrix = {"a":47.945205479452056,"c":0,"e":131.0958904109589,"b":0,"d":-47.945205479452056,"f":400.57191780821915};
|
|
56
|
+
// Manually invert and apply the affine transform
|
|
57
|
+
// Since we only use translate and scale, we can directly compute:
|
|
58
|
+
// x' = (x - tx) / sx
|
|
59
|
+
// y' = (y - ty) / sy
|
|
60
|
+
const sx = matrix.a;
|
|
61
|
+
const sy = matrix.d;
|
|
62
|
+
const tx = matrix.e;
|
|
63
|
+
const ty = matrix.f;
|
|
64
|
+
const realPoint = {
|
|
65
|
+
x: (x - tx) / sx,
|
|
66
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
70
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
71
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
72
|
+
});
|
|
73
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
74
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
75
|
+
});
|
|
76
|
+
]]></script>
|
|
77
|
+
</g>
|
|
78
|
+
<g transform="translate(0, 1216)">
|
|
79
|
+
<style>
|
|
80
|
+
.boundary { fill: rgb(245, 241, 237); }
|
|
81
|
+
.schematic-boundary { fill: none; stroke: #fff; }
|
|
82
|
+
.component { fill: none; stroke: rgb(132, 0, 0); }
|
|
83
|
+
.chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
|
|
84
|
+
.component-pin { fill: none; stroke: rgb(132, 0, 0); }
|
|
85
|
+
.text { font-family: sans-serif; fill: rgb(0, 150, 0); }
|
|
86
|
+
.pin-number { fill: rgb(169, 0, 0); }
|
|
87
|
+
.port-label { fill: rgb(0, 100, 100); }
|
|
88
|
+
.component-name { fill: rgb(0, 100, 100); }
|
|
89
|
+
|
|
90
|
+
</style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 408.88535393706 507.30598795590004 L 456.2436086808524 507.30598795590004 L 456.2436086808524 525.48574025678 L 408.88535393706 525.48574025678" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 507.30598795590004 L 456.2436086808524 507.30598795590004 L 456.2436086808524 525.48574025678 L 408.88535393706 525.48574025678" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 895.1937279855999 678.1956595841721 L 895.1937279855999 696.375411885052 L 1054.2665606183 696.375411885052 L 1054.2665606183 678.1956595841721" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 895.1937279855999 678.1956595841721 L 895.1937279855999 696.375411885052 L 1054.2665606183 696.375411885052 L 1054.2665606183 678.1956595841721" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 408.88535393706 525.48574025678 L 456.2436086808524 525.48574025678 L 456.2436086808524 561.84524485854 L 408.88535393706 561.84524485854" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 525.48574025678 L 456.2436086808524 525.48574025678 L 456.2436086808524 561.84524485854 L 408.88535393706 561.84524485854" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 963.3677991139 63.72003181442807 L 963.3677991139 54.53925690248366 L 922.3724576754155 54.53925690248366" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 963.3677991139 63.72003181442807 L 963.3677991139 54.53925690248366 L 922.3724576754155 54.53925690248366" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 408.88535393706 543.6654925576601 L 529.8716054994163 543.6654925576601 L 529.8716054994163 539.0296557209356" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 543.6654925576601 L 529.8716054994163 543.6654925576601 L 529.8716054994163 539.0296557209356" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><circle cx="456.2436086808524" cy="525.48574025678" r="2.726962845132" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/><circle cx="408.88535393706" cy="525.48574025678" r="2.726962845132" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="99.8295648221" y="370.95784569930004" width="272.6962845132" height="363.5950460176" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="99.8295648221" y="370.95784569930004" width="272.6962845132" height="363.5950460176" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="598.2047494603" x2="407.067378706972" y2="598.2047494603" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="408.88535393706" cy="598.2047494603" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="407.067378706972" y="596.386774230212" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="596.386774230212" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="598.2047494603" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">AVCC</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="580.0249971594201" x2="407.067378706972" y2="580.0249971594201" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="408.88535393706" cy="580.0249971594201" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="407.067378706972" y="578.2070219293321" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="578.2070219293321" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="580.0249971594201" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">VRA2</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="561.84524485854" x2="408.88535393706" y2="561.84524485854" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="407.067378706972" y="560.027269628452" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="560.027269628452" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="561.84524485854" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">AGND</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="543.6654925576601" x2="408.88535393706" y2="543.6654925576601" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><rect x="407.067378706972" y="541.8475173275721" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="541.8475173275721" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="543.6654925576601" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">VRA1</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="525.48574025678" x2="408.88535393706" y2="525.48574025678" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><rect x="407.067378706972" y="523.667765026692" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="523.667765026692" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="525.48574025678" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">FMINR</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="507.30598795590004" x2="408.88535393706" y2="507.30598795590004" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><rect x="407.067378706972" y="505.48801272581204" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="505.48801272581204" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="507.30598795590004" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">FMINL</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component chip sch-component-body" x="854.28928530862" y="639.10919213728" width="105.89705715262596" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="854.28928530862" y="639.10919213728" width="105.89705715262596" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="895.1937279855999" y1="639.10919213728" x2="895.1937279855999" y2="610.930576070916" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="895.1937279855999" cy="609.112600840828" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="893.3757527555119" y="607.29462561074" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="893.375752755512" y="624.1108964890541" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 893.375752755512 624.1108964890541)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="895.1937279855999" y1="648.19906828772" x2="895.1937279855999" y2="678.1956595841721" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><rect x="893.3757527555119" y="676.3776843540841" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="893.375752755512" y="663.197363935946" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 893.375752755512 663.197363935946)">2</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component chip sch-component-body" x="1013.3621179413201" y="639.10919213728" width="105.89705715262585" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="1013.3621179413201" y="639.10919213728" width="105.89705715262585" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="1054.2665606183" y1="639.10919213728" x2="1054.2665606183" y2="610.930576070916" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_2_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="1054.2665606183" cy="609.112600840828" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="1052.448585388212" y="607.29462561074" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.448585388212" y="624.1108964890541" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 1052.448585388212 624.1108964890541)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="1054.2665606183" y1="648.19906828772" x2="1054.2665606183" y2="678.1956595841721" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_2_1__stack1"><rect x="1052.448585388212" y="676.3776843540841" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.448585388212" y="663.197363935946" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 1052.448585388212 663.197363935946)">2</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component chip sch-component-body" x="922.4633564369201" y="93.71662311088005" width="105.89705715262585" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="922.4633564369201" y="93.71662311088005" width="105.89705715262585" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="963.3677991139" y1="93.71662311088005" x2="963.3677991139" y2="63.72003181442807" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_3_0__stack1"><rect x="961.549823883812" y="61.902056584340066" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="961.549823883812" y="78.71832746265403" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 961.549823883812 78.71832746265403)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="963.3677991139" y1="102.80649926132003" x2="963.3677991139" y2="130.98511532768407" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_3_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="963.3677991139" cy="132.803090557772" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="961.549823883812" y="130.985115327684" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="961.549823883812" y="117.80479490954605" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 961.549823883812 117.80479490954605)">2</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="408.88535393706" cy="598.2047494603" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="408.88535393706" cy="580.0249971594201" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="408.88535393706" cy="561.84524485854" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="408.88535393706" cy="543.6654925576601" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="408.88535393706" cy="525.48574025678" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="408.88535393706" cy="507.30598795590004" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="895.1937279855999" cy="609.112600840828" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="895.1937279855999" cy="678.1956595841721" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="1054.2665606183" cy="609.112600840828" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="1054.2665606183" cy="678.1956595841721" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="963.3677991139" cy="63.72003181442807" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="963.3677991139" cy="132.803090557772" r="3.635950460176" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
|
|
91
|
+
M 408.88535393706,598.2047494603
|
|
92
|
+
L 413.7938870582976,589.1148733098601
|
|
93
|
+
L 466.32125137297356,589.1148733098601
|
|
94
|
+
L 466.32125137297356,607.29462561074
|
|
95
|
+
L 413.7938870582976,607.29462561074
|
|
96
|
+
Z
|
|
97
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="417.066242472456" y="598.2047494603" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XXXX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
|
|
98
|
+
M 922.3724576754155,54.53925690248366
|
|
99
|
+
L 917.4639245541779,63.629133052923656
|
|
100
|
+
L 864.936560239502,63.62913305292365
|
|
101
|
+
L 864.936560239502,45.44938075204365
|
|
102
|
+
L 917.4639245541779,45.44938075204366
|
|
103
|
+
Z
|
|
104
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="914.1915691400195" y="54.53925690248366" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XXXX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
|
|
105
|
+
M 408.88535393706,580.0249971594201
|
|
106
|
+
L 413.7938870582976,570.9351210089801
|
|
107
|
+
L 444.9661023368732,570.9351210089801
|
|
108
|
+
L 444.9661023368732,589.1148733098601
|
|
109
|
+
L 413.7938870582976,589.1148733098601
|
|
110
|
+
Z
|
|
111
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="417.066242472456" y="580.0249971594201" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
|
|
112
|
+
M 895.1937279855999,609.112600840828
|
|
113
|
+
L 886.10385183516,604.2040677195904
|
|
114
|
+
L 886.10385183516,573.0318524410148
|
|
115
|
+
L 904.2836041360399,573.0318524410148
|
|
116
|
+
L 904.2836041360399,604.2040677195904
|
|
117
|
+
Z
|
|
118
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="895.1937279855999" y="600.931712305432" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 895.1937279855999 600.931712305432)">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="445.3357573003244" y="561.84524485854" width="21.815702761055945" height="16.36177707079196" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="M 445.3357573003244 578.207021929332 L 467.15146006138036 578.207021929332" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="M 456.2436086808524 578.207021929332 L 456.2436086808524 561.84524485854" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="456.2436086808524" y="582.751960004552" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" x="884.285876605072" y="696.375411885052" width="21.815702761055945" height="16.36177707079196" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" d="M 884.285876605072 712.737188955844 L 906.1015793661279 712.737188955844" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" d="M 895.1937279855999 712.737188955844 L 895.1937279855999 696.375411885052" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" x="895.1937279855999" y="717.282127031064" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" x="952.459947733372" y="132.80309055777198" width="21.815702761055945" height="16.361777070792016" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" d="M 952.459947733372 149.164867628564 L 974.275650494428 149.164867628564" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" d="M 963.3677991139 149.164867628564 L 963.3677991139 132.80309055777198" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" x="963.3677991139" y="153.70980570378399" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_7__stack1" d="
|
|
119
|
+
M 529.8716054994163,539.0296557209356
|
|
120
|
+
L 520.7817293489763,534.121122599698
|
|
121
|
+
L 520.7817293489763,502.9489073211224
|
|
122
|
+
L 538.9614816498563,502.9489073211224
|
|
123
|
+
L 538.9614816498563,534.121122599698
|
|
124
|
+
Z
|
|
125
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_7__stack1" x="529.8716054994163" y="530.8487671855396" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 529.8716054994163 530.8487671855396)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_8__stack1" d="
|
|
126
|
+
M 1054.2665606183,609.112600840828
|
|
127
|
+
L 1045.17668446786,604.2040677195904
|
|
128
|
+
L 1045.17668446786,573.0318524410148
|
|
129
|
+
L 1063.35643676874,573.0318524410148
|
|
130
|
+
L 1063.35643676874,604.2040677195904
|
|
131
|
+
Z
|
|
132
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_8__stack1" x="1054.2665606183" y="600.931712305432" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 1054.2665606183 600.931712305432)">XX</text><text class="sch-text" x="138.007044653948" y="746.369730712472" fill="#7e22ce" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="16.361777070791973px" transform="rotate(0, 138.007044653948, 746.369730712472)">T113-S3</text><text class="sch-text" x="110.73741620262801" y="360.50448812629406" fill="#7e22ce" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="16.361777070791998px" transform="rotate(0, 110.73741620262801, 360.50448812629406)">U3</text><rect class="schematic-box sch-box" x="99.8295648221" y="738.188842177076" width="76.35495966369598" height="16.36177707079196" stroke-width="1.817975230088px" stroke="rgb(132, 0, 0)" fill="transparent" stroke-dasharray="14.543801840704 7.271900920352"/><rect class="schematic-box sch-box" x="94.37563913183598" y="349.1421429382441" width="32.72355414158402" height="22.724690376099943" stroke-width="1.817975230088px" stroke="rgb(132, 0, 0)" fill="transparent" stroke-dasharray="14.543801840704 7.271900920352"/>
|
|
133
|
+
</g>
|
|
134
|
+
</svg>
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chips": [
|
|
3
|
+
{
|
|
4
|
+
"chipId": "schematic_component_0",
|
|
5
|
+
"center": {
|
|
6
|
+
"x": 0,
|
|
7
|
+
"y": 0
|
|
8
|
+
},
|
|
9
|
+
"width": 3.8,
|
|
10
|
+
"height": 4,
|
|
11
|
+
"pins": [
|
|
12
|
+
{
|
|
13
|
+
"pinId": "schematic_port_0",
|
|
14
|
+
"displayName": "AVCC",
|
|
15
|
+
"x": 1.9,
|
|
16
|
+
"y": -0.5
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"pinId": "schematic_port_1",
|
|
20
|
+
"displayName": "VRA2",
|
|
21
|
+
"x": 1.9,
|
|
22
|
+
"y": -0.3
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"pinId": "schematic_port_2",
|
|
26
|
+
"displayName": "AGND",
|
|
27
|
+
"x": 1.9,
|
|
28
|
+
"y": -0.09999999999999998
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"pinId": "schematic_port_3",
|
|
32
|
+
"displayName": "VRA1",
|
|
33
|
+
"x": 1.9,
|
|
34
|
+
"y": 0.10000000000000009
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"pinId": "schematic_port_4",
|
|
38
|
+
"displayName": "FMINR",
|
|
39
|
+
"x": 1.9,
|
|
40
|
+
"y": 0.30000000000000004
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"pinId": "schematic_port_5",
|
|
44
|
+
"displayName": "FMINL",
|
|
45
|
+
"x": 1.9,
|
|
46
|
+
"y": 0.5
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"chipId": "schematic_component_1",
|
|
52
|
+
"center": {
|
|
53
|
+
"x": 7.3825,
|
|
54
|
+
"y": -1
|
|
55
|
+
},
|
|
56
|
+
"width": 1.165,
|
|
57
|
+
"height": 0.7599999999999998,
|
|
58
|
+
"pins": [
|
|
59
|
+
{
|
|
60
|
+
"pinId": "schematic_port_6",
|
|
61
|
+
"displayName": "1",
|
|
62
|
+
"x": 7.25,
|
|
63
|
+
"y": -0.6200000000000001,
|
|
64
|
+
"_facingDirection": "y+"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"pinId": "schematic_port_7",
|
|
68
|
+
"displayName": "2",
|
|
69
|
+
"x": 7.25,
|
|
70
|
+
"y": -1.38,
|
|
71
|
+
"_facingDirection": "y-"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"chipId": "schematic_component_2",
|
|
77
|
+
"center": {
|
|
78
|
+
"x": 9.1325,
|
|
79
|
+
"y": -1
|
|
80
|
+
},
|
|
81
|
+
"width": 1.1649999999999991,
|
|
82
|
+
"height": 0.7599999999999998,
|
|
83
|
+
"pins": [
|
|
84
|
+
{
|
|
85
|
+
"pinId": "schematic_port_8",
|
|
86
|
+
"displayName": "1",
|
|
87
|
+
"x": 9,
|
|
88
|
+
"y": -0.6200000000000001,
|
|
89
|
+
"_facingDirection": "y+"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"pinId": "schematic_port_9",
|
|
93
|
+
"displayName": "2",
|
|
94
|
+
"x": 9,
|
|
95
|
+
"y": -1.38,
|
|
96
|
+
"_facingDirection": "y-"
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"chipId": "schematic_component_3",
|
|
102
|
+
"center": {
|
|
103
|
+
"x": 8.1325,
|
|
104
|
+
"y": 5
|
|
105
|
+
},
|
|
106
|
+
"width": 1.165,
|
|
107
|
+
"height": 0.7599999999999998,
|
|
108
|
+
"pins": [
|
|
109
|
+
{
|
|
110
|
+
"pinId": "schematic_port_10",
|
|
111
|
+
"displayName": "1",
|
|
112
|
+
"x": 8,
|
|
113
|
+
"y": 5.38,
|
|
114
|
+
"_facingDirection": "y+"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"pinId": "schematic_port_11",
|
|
118
|
+
"displayName": "2",
|
|
119
|
+
"x": 8,
|
|
120
|
+
"y": 4.62,
|
|
121
|
+
"_facingDirection": "y-"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"directConnections": [],
|
|
127
|
+
"netConnections": [
|
|
128
|
+
{
|
|
129
|
+
"netId": "P1V8",
|
|
130
|
+
"isGround": false,
|
|
131
|
+
"netLabelWidth": 0.6,
|
|
132
|
+
"anchoredNetLabelWidth": 0.6,
|
|
133
|
+
"allowInlineNetLabel": true,
|
|
134
|
+
"inlineNetLabelHeight": 0.12,
|
|
135
|
+
"inlineNetLabelWidth": 0.4,
|
|
136
|
+
"pinIds": [
|
|
137
|
+
"schematic_port_0",
|
|
138
|
+
"schematic_port_10"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"netId": "Net_U3F_VRA2",
|
|
143
|
+
"isGround": false,
|
|
144
|
+
"netLabelWidth": 0.42,
|
|
145
|
+
"netLabelHeight": 1.56,
|
|
146
|
+
"pinIds": [
|
|
147
|
+
"schematic_port_1",
|
|
148
|
+
"schematic_port_6"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"netId": "GND",
|
|
153
|
+
"isGround": true,
|
|
154
|
+
"netLabelWidth": 0.42,
|
|
155
|
+
"netLabelHeight": 0.48,
|
|
156
|
+
"pinIds": [
|
|
157
|
+
"schematic_port_2",
|
|
158
|
+
"schematic_port_4",
|
|
159
|
+
"schematic_port_5",
|
|
160
|
+
"schematic_port_7",
|
|
161
|
+
"schematic_port_9",
|
|
162
|
+
"schematic_port_11"
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"netId": "Net_U3F_VRA1",
|
|
167
|
+
"isGround": false,
|
|
168
|
+
"netLabelWidth": 0.42,
|
|
169
|
+
"netLabelHeight": 1.56,
|
|
170
|
+
"pinIds": [
|
|
171
|
+
"schematic_port_3",
|
|
172
|
+
"schematic_port_8"
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"textBoxes": [
|
|
177
|
+
{
|
|
178
|
+
"chipId": "schematic_component_0",
|
|
179
|
+
"center": {
|
|
180
|
+
"x": -1.08,
|
|
181
|
+
"y": -2.13
|
|
182
|
+
},
|
|
183
|
+
"width": 0.84,
|
|
184
|
+
"height": 0.17999999999999972,
|
|
185
|
+
"text": "T113-S3"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"chipId": "schematic_component_0",
|
|
189
|
+
"center": {
|
|
190
|
+
"x": -1.38,
|
|
191
|
+
"y": 2.1149999999999998
|
|
192
|
+
},
|
|
193
|
+
"width": 0.3600000000000001,
|
|
194
|
+
"height": 0.24999999999999978,
|
|
195
|
+
"text": "U3"
|
|
196
|
+
}
|
|
197
|
+
],
|
|
198
|
+
"availableNetLabelOrientations": {
|
|
199
|
+
"Net_U3F_VRA2": [
|
|
200
|
+
"y+"
|
|
201
|
+
],
|
|
202
|
+
"GND": [
|
|
203
|
+
"y-"
|
|
204
|
+
],
|
|
205
|
+
"Net_U3F_VRA1": [
|
|
206
|
+
"y+"
|
|
207
|
+
],
|
|
208
|
+
"P1V8": [
|
|
209
|
+
"x-",
|
|
210
|
+
"x+"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"maxMspPairDistance": 0.8,
|
|
214
|
+
"_hideRatsNet": false
|
|
215
|
+
}
|
|
@@ -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-20260901T064117Z.json"
|
|
4
|
+
import "tests/fixtures/matcher"
|
|
5
|
+
|
|
6
|
+
test("bug-report-20260901T064117Z", () => {
|
|
7
|
+
const solver = new SchematicTracePipelineSolver(inputProblem as any)
|
|
8
|
+
|
|
9
|
+
solver.solve()
|
|
10
|
+
|
|
11
|
+
expect(solver).toMatchSolverSnapshot(import.meta.path)
|
|
12
|
+
})
|