@tscircuit/schematic-trace-solver 0.0.190 → 0.0.192
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 +437 -211
- package/lib/solvers/InlineNetLabelSolver/getLocalTraceLabelShifts.ts +29 -0
- package/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts +7 -0
- package/lib/solvers/LongDistancePairSolver/getParallelNetLabelPolicy.ts +98 -0
- package/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts +24 -2
- package/lib/solvers/MspConnectionPairSolver/getParallelRailPairs.ts +178 -0
- package/lib/solvers/NetLabelToTraceSolver/NetLabelToTraceSolver.ts +13 -0
- package/lib/solvers/SameNetJunctionAlignmentSolver/collapseRedundantSharedEndpointStubs.ts +12 -6
- package/package.json +1 -1
- package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +837 -799
- package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +904 -866
- package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +533 -524
- package/tests/bug-reports/bug-report-20260721T221026Z/__snapshots__/bug-report-20260721T221026Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260724T175257Z/__snapshots__/bug-report-20260724T175257Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260728T144234Z/__snapshots__/bug-report-20260728T144234Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260804T171919Z/__snapshots__/bug-report-20260804T171919Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +94 -94
- package/tests/bug-reports/bug-report-20260815T073240Z/__snapshots__/bug-report-20260815T073240Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260901T055358Z/__snapshots__/bug-report-20260901T055358Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260901T064117Z/bug-report-20260901T064117Z.test.ts +13 -2
- package/tests/bug-reports/bug-report-20260902T092425Z/__snapshots__/bug-report-20260902T092425Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260902T092425Z/bug-report-20260902T092425Z.test.ts +16 -2
- package/tests/bug-reports/bug-report-20260905T041712Z/__snapshots__/bug-report-20260905T041712Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260907T083336Z/__snapshots__/bug-report-20260907T083336Z.snap.svg +2 -2
- package/tests/bug-reports/bug-report-20260907T110144Z/__snapshots__/bug-report-20260907T110144Z.snap.svg +19 -58
- package/tests/bug-reports/bug-report-20260907T110144Z/bug-report-20260907T110144Z.test.ts +2 -2
- package/tests/bug-reports/bug-report-20260907T145640Z/__snapshots__/bug-report-20260907T145640Z.snap.svg +917 -933
- package/tests/examples/__snapshots__/example13.snap.svg +2 -2
- package/tests/examples/__snapshots__/example15.snap.svg +2 -2
- package/tests/examples/__snapshots__/example51.snap.svg +2 -2
- package/tests/repros/__snapshots__/board-1273-trace-overlap-cycle.snap.svg +2 -2
- package/tests/repros/__snapshots__/board-15984-same-net-junction.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-bq25895-cross-net-trace-overlap.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-esp12f-section.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-example35-minimize-trace-crossing.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-hub-usb-sheet.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-isolated-rs485-isow7841.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-pga300-redundant-ground-traces.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-pmp11282-isolated-dcdc.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-powerbank-3v-system-power.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-repeated-power-rail-junctions.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-rp2040-gamepad-trace-alignment.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-smartwatch-power-sheet.snap.svg +111 -75
- package/tests/repros/__snapshots__/repro-tida00553-j4-cell-divider.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-tida010076-page02.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-type-c-vbus-led-ground-label.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro-usb-power-vbus-label-detour.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +2 -2
- package/tests/repros/__snapshots__/repro161-power-section-autolayout.snap.svg +2 -2
- package/tests/repros/repro-trellis-core-decoupling-snake-traces.test.ts +66 -0
- package/tests/solvers/InlineNetLabelSolver/local-trace-label-shifts.test.ts +62 -0
- package/tests/solvers/LongDistancePairSolver/__snapshots__/decoupling-mixed-supplies.snap.svg +112 -0
- package/tests/solvers/LongDistancePairSolver/__snapshots__/horizontal-rails.snap.svg +79 -0
- package/tests/solvers/LongDistancePairSolver/__snapshots__/vertical-rails.snap.svg +86 -0
- package/tests/solvers/LongDistancePairSolver/parallel-decoupling-labels.test.ts +505 -0
- package/tests/solvers/SameNetJunctionAlignmentSolver/collapse-redundant-shared-endpoint-stubs.test.ts +45 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { expect, test } from "bun:test"
|
|
2
|
+
import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
|
|
3
|
+
import { getTraceConnectedPinComponents } from "lib/solvers/SchematicTraceLinesSolver/getTraceConnectedPinComponents"
|
|
4
|
+
import type { InputProblem } from "lib/types/InputProblem"
|
|
5
|
+
import inputProblem from "../bug-reports/bug-report-20260907T110144Z/bug-report-20260907T110144Z.json"
|
|
6
|
+
|
|
7
|
+
test("Trellis decoupling capacitors share straight rails within each row", () => {
|
|
8
|
+
const solver = new SchematicTracePipelineSolver(
|
|
9
|
+
structuredClone(inputProblem) as unknown as InputProblem,
|
|
10
|
+
)
|
|
11
|
+
solver.solve()
|
|
12
|
+
|
|
13
|
+
expect(solver.solved).toBe(true)
|
|
14
|
+
expect(solver.failed).toBe(false)
|
|
15
|
+
|
|
16
|
+
const { traces, netLabelPlacements, inlineNetLabelPlacements } =
|
|
17
|
+
solver.netLabelToTraceSolver!.getOutput()
|
|
18
|
+
const labels = [...netLabelPlacements, ...inlineNetLabelPlacements]
|
|
19
|
+
const netMap = solver.mspConnectionPairSolver!.globalConnMap
|
|
20
|
+
const groundPins = new Set(
|
|
21
|
+
inputProblem.netConnections.find((net) => net.netId === "GND")!.pinIds,
|
|
22
|
+
)
|
|
23
|
+
const capacitors = inputProblem.chips.filter(
|
|
24
|
+
(chip) =>
|
|
25
|
+
chip.pins.length === 2 &&
|
|
26
|
+
chip.pins.every((pin) =>
|
|
27
|
+
inputProblem.netConnections.some((net) =>
|
|
28
|
+
net.pinIds.includes(pin.pinId),
|
|
29
|
+
),
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
expect(capacitors).toHaveLength(21)
|
|
33
|
+
|
|
34
|
+
for (const capacitor of capacitors) {
|
|
35
|
+
for (const pin of capacitor.pins) {
|
|
36
|
+
const netId = netMap.getNetConnectedToId(pin.pinId)!
|
|
37
|
+
const component = getTraceConnectedPinComponents({
|
|
38
|
+
pinIds: inputProblem.chips
|
|
39
|
+
.flatMap((chip) => chip.pins)
|
|
40
|
+
.filter((other) => netMap.getNetConnectedToId(other.pinId) === netId)
|
|
41
|
+
.map((other) => other.pinId),
|
|
42
|
+
traces,
|
|
43
|
+
}).find((component) => component.pinIds.includes(pin.pinId))!
|
|
44
|
+
const pinLabels = labels.filter((label) =>
|
|
45
|
+
label.pinIds.some((pinId) => component.pinIds.includes(pinId)),
|
|
46
|
+
)
|
|
47
|
+
expect(pinLabels).toHaveLength(1)
|
|
48
|
+
expect(pinLabels[0]!.globalConnNetId).toBe(netId)
|
|
49
|
+
// Shared rails stay just outside the row instead of alternating above
|
|
50
|
+
// and below components or running back to the IC.
|
|
51
|
+
const sign = groundPins.has(pin.pinId) ? -1 : 1
|
|
52
|
+
for (const trace of component.traces) {
|
|
53
|
+
for (const point of trace.tracePath) {
|
|
54
|
+
expect(sign * (point.y - pin.y)).toBeGreaterThanOrEqual(-1e-6)
|
|
55
|
+
expect(sign * (point.y - pin.y)).toBeLessThanOrEqual(0.5)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (groundPins.has(pin.pinId)) {
|
|
59
|
+
expect(component.pinIds).toHaveLength(
|
|
60
|
+
pin.y > 0 ? 13 : pin.x < 0 ? 6 : 4,
|
|
61
|
+
)
|
|
62
|
+
expect(pinLabels[0]).toMatchObject({ orientation: "y-" })
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
})
|
|
@@ -88,6 +88,68 @@ for (const rotation of [0, 1, 2, 3])
|
|
|
88
88
|
expect(output).toEqual(saved)
|
|
89
89
|
})
|
|
90
90
|
|
|
91
|
+
for (const hasJunction of [false, true])
|
|
92
|
+
test(`clears a neighboring redundant bend without losing a junction (junction=${hasJunction})`, () => {
|
|
93
|
+
const { input, output } = fixture()
|
|
94
|
+
input.chips.push({
|
|
95
|
+
chipId: "body",
|
|
96
|
+
center: { x: 2.5, y: 0 },
|
|
97
|
+
width: 1,
|
|
98
|
+
height: 2,
|
|
99
|
+
pins: [],
|
|
100
|
+
})
|
|
101
|
+
output.traces = [
|
|
102
|
+
trace("wire", [
|
|
103
|
+
{ x: 2, y: -0.4 },
|
|
104
|
+
{ x: 1.9, y: -0.4 },
|
|
105
|
+
{ x: 1.9, y: 0.4 },
|
|
106
|
+
{ x: 2, y: 0.4 },
|
|
107
|
+
]),
|
|
108
|
+
trace("neighbor", [
|
|
109
|
+
{ x: 2, y: -0.2 },
|
|
110
|
+
{ x: 0.7, y: -0.2 },
|
|
111
|
+
{ x: 0.7, y: 0.4 },
|
|
112
|
+
{ x: 1.7, y: 0.4 },
|
|
113
|
+
{ x: 1.7, y: 0.6 },
|
|
114
|
+
{ x: 2, y: 0.6 },
|
|
115
|
+
]),
|
|
116
|
+
]
|
|
117
|
+
Object.assign(output.netLabelPlacements[0]!, {
|
|
118
|
+
orientation: "x-",
|
|
119
|
+
anchorPoint: { x: 2, y: 0 },
|
|
120
|
+
center: { x: 1.4, y: 0 },
|
|
121
|
+
width: 1.2,
|
|
122
|
+
})
|
|
123
|
+
if (hasJunction)
|
|
124
|
+
output.traces.push({
|
|
125
|
+
...trace("branch", [
|
|
126
|
+
{ x: 1.2, y: 0.4 },
|
|
127
|
+
{ x: 1.2, y: 0.8 },
|
|
128
|
+
]),
|
|
129
|
+
globalConnNetId: "neighbor",
|
|
130
|
+
})
|
|
131
|
+
const saved = structuredClone(output)
|
|
132
|
+
const proposals = [...getLocalTraceLabelShifts(input, output)]
|
|
133
|
+
if (hasJunction) {
|
|
134
|
+
expect(proposals).toEqual([])
|
|
135
|
+
} else {
|
|
136
|
+
expect(proposals.length).toBeGreaterThan(0)
|
|
137
|
+
for (const proposal of proposals) {
|
|
138
|
+
expect(proposal.traces.map((trace) => trace.tracePath.length)).toEqual([
|
|
139
|
+
4, 4,
|
|
140
|
+
])
|
|
141
|
+
for (const [index, trace] of proposal.traces.entries()) {
|
|
142
|
+
expect(trace.tracePath[0]).toEqual(output.traces[index]!.tracePath[0])
|
|
143
|
+
expect(trace.tracePath.at(-1)).toEqual(
|
|
144
|
+
output.traces[index]!.tracePath.at(-1),
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
expect(getOutputLabelCollisions(proposal)).toEqual([])
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
expect(output).toEqual(saved)
|
|
151
|
+
})
|
|
152
|
+
|
|
91
153
|
test.each([
|
|
92
154
|
"chip",
|
|
93
155
|
"parallel wire",
|
|
@@ -0,0 +1,112 @@
|
|
|
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="0,0.38 3,0.38" data-type="line" data-label="" points="50.769230769230774,306.35897435897436 158.46153846153845,306.35897435897436" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,0.38 6,0.38" data-type="line" data-label="" points="50.769230769230774,306.35897435897436 266.15384615384613,306.35897435897436" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3,0.38 6,0.38" data-type="line" data-label="" points="158.46153846153845,306.35897435897436 266.15384615384613,306.35897435897436" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.38 3,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 158.46153846153845,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.38 6,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 266.15384615384613,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.38 9,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 373.8461538461538,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.38 12,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 481.5384615384615,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.38 15,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 589.230769230769,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3,-0.38 6,-0.38" data-type="line" data-label="" points="158.46153846153845,333.64102564102564 266.15384615384613,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3,-0.38 9,-0.38" data-type="line" data-label="" points="158.46153846153845,333.64102564102564 373.8461538461538,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3,-0.38 12,-0.38" data-type="line" data-label="" points="158.46153846153845,333.64102564102564 481.5384615384615,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="3,-0.38 15,-0.38" data-type="line" data-label="" points="158.46153846153845,333.64102564102564 589.230769230769,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6,-0.38 9,-0.38" data-type="line" data-label="" points="266.15384615384613,333.64102564102564 373.8461538461538,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6,-0.38 12,-0.38" data-type="line" data-label="" points="266.15384615384613,333.64102564102564 481.5384615384615,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6,-0.38 15,-0.38" data-type="line" data-label="" points="266.15384615384613,333.64102564102564 589.230769230769,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9,-0.38 12,-0.38" data-type="line" data-label="" points="373.8461538461538,333.64102564102564 481.5384615384615,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9,-0.38 15,-0.38" data-type="line" data-label="" points="373.8461538461538,333.64102564102564 589.230769230769,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12,-0.38 15,-0.38" data-type="line" data-label="" points="481.5384615384615,333.64102564102564 589.230769230769,333.64102564102564" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,0.38 0,0.5800000000000001 3,0.5800000000000001 3,0.38" data-type="line" data-label="" points="50.769230769230774,306.35897435897436 50.769230769230774,299.1794871794872 158.46153846153845,299.1794871794872 158.46153846153845,306.35897435897436" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3,0.5800000000000001 6,0.5800000000000002 6,0.38" data-type="line" data-label="" points="158.46153846153845,299.1794871794872 266.15384615384613,299.1794871794872 266.15384615384613,306.35897435897436" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0,-0.38 0,-0.5800000000000001 3,-0.5800000000000001 3,-0.38" data-type="line" data-label="" points="50.769230769230774,333.64102564102564 50.769230769230774,340.8205128205128 158.46153846153845,340.8205128205128 158.46153846153845,333.64102564102564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3,-0.5800000000000001 6,-0.5800000000000002 6,-0.38" data-type="line" data-label="" points="158.46153846153845,340.8205128205128 266.15384615384613,340.8205128205128 266.15384615384613,333.64102564102564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="6,-0.5800000000000002 9,-0.5800000000000002 9,-0.38" data-type="line" data-label="" points="266.15384615384613,340.8205128205128 373.8461538461538,340.8205128205128 373.8461538461538,333.64102564102564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="9,-0.5800000000000002 12,-0.5799999999999993 12,-0.38" data-type="line" data-label="" points="373.8461538461538,340.8205128205128 481.5384615384615,340.8205128205128 481.5384615384615,333.64102564102564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12,-0.5799999999999993 15,-0.5799999999999993 15,-0.38" data-type="line" data-label="" points="481.5384615384615,340.8205128205128 589.230769230769,340.8205128205128 589.230769230769,333.64102564102564" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="C_MCU_VDD1" data-x="0" data-y="0" x="40.00000000000001" y="306.35897435897436" width="21.538461538461533" height="27.28205128205127" fill="hsl(247, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="C_MCU_VDD3" data-x="3" data-y="0" x="147.69230769230768" y="306.35897435897436" width="21.538461538461547" height="27.28205128205127" fill="hsl(249, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="C_MCU_VDD2" data-x="6" data-y="0" x="255.38461538461536" y="306.35897435897436" width="21.538461538461547" height="27.28205128205127" fill="hsl(248, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="C_MCU_DEC1" data-x="9" data-y="0" x="363.076923076923" y="306.35897435897436" width="21.538461538461604" height="27.28205128205127" fill="hsl(259, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="C_MCU_DEC3" data-x="12" data-y="0" x="470.7692307692307" y="306.35897435897436" width="21.538461538461604" height="27.28205128205127" fill="hsl(261, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="C_MCU_DEC4" data-x="15" data-y="0" x="578.4615384615382" y="306.35897435897436" width="21.53846153846166" height="27.28205128205127" fill="hsl(262, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="netId: V3V3
|
|
4
|
+
globalConnNetId: connectivity_net0" data-x="0" data-y="0.805" x="47.17948717948718" y="283.025641025641" width="7.179487179487182" height="16.153846153846132" fill="#ef444466" stroke="#ef4444" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
5
|
+
globalConnNetId: connectivity_net4" data-x="0" data-y="-0.805" x="47.17948717948718" y="340.8205128205128" width="7.179487179487182" height="16.153846153846132" fill="#00000066" stroke="#000000" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="netId: DEC1
|
|
6
|
+
globalConnNetId: connectivity_net1" data-x="9" data-y="0.606" x="370.2564102564103" y="290.16923076923075" width="7.179487179487126" height="16.15384615384619" fill="#ef444466" stroke="#ef4444" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="netId: DEC3
|
|
7
|
+
globalConnNetId: connectivity_net2" data-x="12" data-y="0.606" x="477.9487179487179" y="290.16923076923075" width="7.179487179487126" height="16.15384615384619" fill="#ef444466" stroke="#ef4444" stroke-width="0.02785714285714286"/></g><g><rect data-type="rect" data-label="netId: DEC4
|
|
8
|
+
globalConnNetId: connectivity_net3" data-x="15" data-y="0.606" x="585.6410256410255" y="290.16923076923075" width="7.179487179487069" height="16.15384615384619" fill="#ef444466" stroke="#ef4444" stroke-width="0.02785714285714286"/></g><g><circle data-type="point" data-label="C1.1
|
|
9
|
+
y+" data-x="0" data-y="0.38" cx="50.769230769230774" cy="306.35897435897436" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
|
|
10
|
+
y-" data-x="0" data-y="-0.38" cx="50.769230769230774" cy="333.64102564102564" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.1
|
|
11
|
+
y+" data-x="3" data-y="0.38" cx="158.46153846153845" cy="306.35897435897436" r="3" fill="hsl(2, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.2
|
|
12
|
+
y-" data-x="3" data-y="-0.38" cx="158.46153846153845" cy="333.64102564102564" r="3" fill="hsl(3, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.1
|
|
13
|
+
y+" data-x="6" data-y="0.38" cx="266.15384615384613" cy="306.35897435897436" r="3" fill="hsl(243, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.2
|
|
14
|
+
y-" data-x="6" data-y="-0.38" cx="266.15384615384613" cy="333.64102564102564" r="3" fill="hsl(244, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C4.1
|
|
15
|
+
y+" data-x="9" data-y="0.38" cx="373.8461538461538" cy="306.35897435897436" r="3" fill="hsl(124, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C4.2
|
|
16
|
+
y-" data-x="9" data-y="-0.38" cx="373.8461538461538" cy="333.64102564102564" r="3" fill="hsl(125, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C5.1
|
|
17
|
+
y+" data-x="12" data-y="0.38" cx="481.5384615384615" cy="306.35897435897436" r="3" fill="hsl(5, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C5.2
|
|
18
|
+
y-" data-x="12" data-y="-0.38" cx="481.5384615384615" cy="333.64102564102564" r="3" fill="hsl(6, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C6.1
|
|
19
|
+
y+" data-x="15" data-y="0.38" cx="589.230769230769" cy="306.35897435897436" r="3" fill="hsl(246, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C6.2
|
|
20
|
+
y-" data-x="15" data-y="-0.38" cx="589.230769230769" cy="333.64102564102564" r="3" fill="hsl(247, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
21
|
+
orientation: y+" data-x="0" data-y="0.5800000000000001" cx="50.769230769230774" cy="299.1794871794872" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
22
|
+
orientation: y-" data-x="0" data-y="-0.5800000000000001" cx="50.769230769230774" cy="340.8205128205128" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
23
|
+
orientation: y+" data-x="9" data-y="0.38" cx="373.8461538461538" cy="306.35897435897436" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
24
|
+
orientation: y+" data-x="12" data-y="0.38" cx="481.5384615384615" cy="306.35897435897436" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
25
|
+
orientation: y+" data-x="15" data-y="0.38" cx="589.230769230769" cy="306.35897435897436" 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[
|
|
26
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
27
|
+
const svg = e.currentTarget;
|
|
28
|
+
const rect = svg.getBoundingClientRect();
|
|
29
|
+
const x = e.clientX - rect.left;
|
|
30
|
+
const y = e.clientY - rect.top;
|
|
31
|
+
const crosshair = svg.getElementById('crosshair');
|
|
32
|
+
const h = svg.getElementById('crosshair-h');
|
|
33
|
+
const v = svg.getElementById('crosshair-v');
|
|
34
|
+
const coords = svg.getElementById('coordinates');
|
|
35
|
+
|
|
36
|
+
crosshair.style.display = 'block';
|
|
37
|
+
h.setAttribute('x1', '0');
|
|
38
|
+
h.setAttribute('x2', '640');
|
|
39
|
+
h.setAttribute('y1', y);
|
|
40
|
+
h.setAttribute('y2', y);
|
|
41
|
+
v.setAttribute('x1', x);
|
|
42
|
+
v.setAttribute('x2', x);
|
|
43
|
+
v.setAttribute('y1', '0');
|
|
44
|
+
v.setAttribute('y2', '640');
|
|
45
|
+
|
|
46
|
+
// Calculate real coordinates using inverse transformation
|
|
47
|
+
const matrix = {"a":35.89743589743589,"c":0,"e":50.769230769230774,"b":0,"d":-35.89743589743589,"f":320};
|
|
48
|
+
// Manually invert and apply the affine transform
|
|
49
|
+
// Since we only use translate and scale, we can directly compute:
|
|
50
|
+
// x' = (x - tx) / sx
|
|
51
|
+
// y' = (y - ty) / sy
|
|
52
|
+
const sx = matrix.a;
|
|
53
|
+
const sy = matrix.d;
|
|
54
|
+
const tx = matrix.e;
|
|
55
|
+
const ty = matrix.f;
|
|
56
|
+
const realPoint = {
|
|
57
|
+
x: (x - tx) / sx,
|
|
58
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
62
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
63
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
64
|
+
});
|
|
65
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
66
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
67
|
+
});
|
|
68
|
+
]]></script>
|
|
69
|
+
</g>
|
|
70
|
+
<g transform="translate(0, 1216)">
|
|
71
|
+
<style>
|
|
72
|
+
.boundary { fill: rgb(245, 241, 237); }
|
|
73
|
+
.schematic-boundary { fill: none; stroke: #fff; }
|
|
74
|
+
.component { fill: none; stroke: rgb(132, 0, 0); }
|
|
75
|
+
.chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
|
|
76
|
+
.component-pin { fill: none; stroke: rgb(132, 0, 0); }
|
|
77
|
+
.text { font-family: sans-serif; fill: rgb(0, 150, 0); }
|
|
78
|
+
.pin-number { fill: rgb(169, 0, 0); }
|
|
79
|
+
.port-label { fill: rgb(0, 100, 100); }
|
|
80
|
+
.component-name { fill: rgb(0, 100, 100); }
|
|
81
|
+
|
|
82
|
+
</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 74.9124854142 374.94049008166803 L 74.9124854142 360.938156359388 L 284.94749124839996 360.938156359388 L 284.94749124839996 374.94049008166803" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 74.9124854142 374.94049008166803 L 74.9124854142 360.938156359388 L 284.94749124839996 360.938156359388 L 284.94749124839996 374.94049008166803" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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 284.94749124839996 360.938156359388 L 494.98249708259993 360.938156359388 L 494.98249708259993 374.94049008166803" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 284.94749124839996 360.938156359388 L 494.98249708259993 360.938156359388 L 494.98249708259993 374.94049008166803" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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 74.9124854142 428.14935822633197 L 74.9124854142 442.151691948612 L 284.94749124839996 442.151691948612 L 284.94749124839996 428.14935822633197" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 74.9124854142 428.14935822633197 L 74.9124854142 442.151691948612 L 284.94749124839996 442.151691948612 L 284.94749124839996 428.14935822633197" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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 284.94749124839996 442.151691948612 L 494.98249708259993 442.151691948612 L 494.98249708259993 428.14935822633197" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 284.94749124839996 442.151691948612 L 494.98249708259993 442.151691948612 L 494.98249708259993 428.14935822633197" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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 494.98249708259993 442.151691948612 L 705.0175029167999 442.151691948612 L 705.0175029167999 428.14935822633197" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 494.98249708259993 442.151691948612 L 705.0175029167999 442.151691948612 L 705.0175029167999 428.14935822633197" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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_5__stack1"><path d="M 705.0175029167999 442.151691948612 L 915.0525087509999 442.1516919486119 L 915.0525087509999 428.14935822633197" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 705.0175029167999 442.151691948612 L 915.0525087509999 442.1516919486119 L 915.0525087509999 428.14935822633197" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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_6__stack1"><path d="M 915.0525087509999 442.1516919486119 L 1125.0875145852 442.1516919486119 L 1125.0875145852 428.14935822633197" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="11.201866977824px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 915.0525087509999 442.1516919486119 L 1125.0875145852 442.1516919486119 L 1125.0875145852 428.14935822633197" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.400233372228px" 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="284.94749124839996" cy="360.938156359388" r="2.100350058342" 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"><circle cx="284.94749124839996" cy="442.151691948612" r="2.100350058342" 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_3__stack1"><circle cx="494.98249708259993" cy="442.151691948612" r="2.100350058342" 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_4__stack1"><circle cx="705.0175029167999" cy="442.151691948612" r="2.100350058342" 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_5__stack1"><circle cx="915.0525087509999" cy="442.1516919486119" r="2.100350058342" 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_6__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component-overlay sch-component-overlay" x="60.72168028001812" y="374.940490081668" width="28.381610268363772" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 74.9124854142 428.149358226332 L 74.9124854142 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 74.9124854142 396.2240373395336 L 74.9124854142 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 89.10329054838189 406.8658109684664 L 60.72168028001812 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 89.10329054838189 396.2240373395336 L 60.72168028001812 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="85.11085180859394" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C1</text><text class="sch-component-text" x="85.11085180859394" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="270.75668611421804" y="374.940490081668" width="28.38161026836383" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 284.94749124839996 428.149358226332 L 284.94749124839996 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 284.94749124839996 396.2240373395336 L 284.94749124839996 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 299.13829638258187 406.8658109684664 L 270.75668611421804 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 299.13829638258187 396.2240373395336 L 270.75668611421804 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="295.1458576427939" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C2</text><text class="sch-component-text" x="295.1458576427939" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="480.791691948418" y="374.940490081668" width="28.38161026836383" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 494.98249708259993 428.149358226332 L 494.98249708259993 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 494.98249708259993 396.2240373395336 L 494.98249708259993 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 509.17330221678185 406.8658109684664 L 480.791691948418 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 509.17330221678185 396.2240373395336 L 480.791691948418 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="505.18086347699386" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C3</text><text class="sch-component-text" x="505.18086347699386" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component-overlay sch-component-overlay" x="690.826697782618" y="374.940490081668" width="28.38161026836383" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 705.0175029167999 428.149358226332 L 705.0175029167999 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 705.0175029167999 396.2240373395336 L 705.0175029167999 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 719.2083080509818 406.8658109684664 L 690.826697782618 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 719.2083080509818 396.2240373395336 L 690.826697782618 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="715.2158693111938" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C4</text><text class="sch-component-text" x="715.2158693111938" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text><circle class="component-pin sch-component-pin" cx="705.0175029167999" cy="374.940490081668" r="1.400233372228px" stroke-width="1.400233372228px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_4__stack1"><rect class="component-overlay sch-component-overlay" x="900.861703616818" y="374.940490081668" width="28.38161026836383" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 915.0525087509999 428.149358226332 L 915.0525087509999 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 915.0525087509999 396.2240373395336 L 915.0525087509999 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 929.2433138851818 406.8658109684664 L 900.861703616818 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 929.2433138851818 396.2240373395336 L 900.861703616818 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="925.2508751453938" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C5</text><text class="sch-component-text" x="925.2508751453938" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text><circle class="component-pin sch-component-pin" cx="915.0525087509999" cy="374.940490081668" r="1.400233372228px" stroke-width="1.400233372228px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_5__stack1"><rect class="component-overlay sch-component-overlay" x="1110.8967094510183" y="374.940490081668" width="28.381610268363602" height="53.20886814466405" fill="transparent"/><path class="sch-component-symbol-path" d="M 1125.0875145852 428.149358226332 L 1125.0875145852 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1125.0875145852 396.2240373395336 L 1125.0875145852 374.940490081668" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1139.278319719382 406.8658109684664 L 1110.8967094510183 406.8658109684664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1139.278319719382 396.2240373395336 L 1110.8967094510183 396.2240373395336" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="1135.2858809795941" y="383.8086347724453" stroke="rgb(245, 241, 237)" stroke-width="1.400233372228px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="12.602100350052px">C6</text><text class="sch-component-text" x="1135.2858809795941" y="419.2812135355547" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="12.602100350052px"></text><circle class="component-pin sch-component-pin" cx="1125.0875145852" cy="374.940490081668" r="1.400233372228px" stroke-width="1.400233372228px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="74.9124854142" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="74.9124854142" cy="433.750291715244" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="284.94749124839996" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="284.94749124839996" cy="433.750291715244" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="494.98249708259993" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="494.98249708259993" cy="433.750291715244" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="705.0175029167999" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="705.0175029167999" cy="433.750291715244" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_0__stack1"><circle cx="915.0525087509999" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_4_1__stack1"><circle cx="915.0525087509999" cy="433.750291715244" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_5_0__stack1"><circle cx="1125.0875145852" cy="380.54142357058" r="2.800466744456" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_5_1__stack1"><circle cx="1125.0875145852" cy="433.750291715244" r="2.800466744456" 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="
|
|
83
|
+
M 74.9124854142,360.938156359388
|
|
84
|
+
L 67.91131855306,357.15752625437244
|
|
85
|
+
L 67.91131855306001,319.5005834305874
|
|
86
|
+
L 81.91365227534001,319.5005834305874
|
|
87
|
+
L 81.91365227534001,357.15752625437244
|
|
88
|
+
Z
|
|
89
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.400233372228px"/><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="74.9124854142" y="354.63710618436204" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="12.602100350052px" transform="rotate(-90 74.9124854142 354.63710618436204)">V3V3</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_1__stack1" x="66.51108518083201" y="442.15169194861204" width="16.802800466735988" height="12.602100350051956" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="M 66.51108518083201 454.753792298664 L 83.313885647568 454.753792298664" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" 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_1__stack1" d="M 74.9124854142 454.753792298664 L 74.9124854142 442.15169194861204" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.400233372228px" 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_1__stack1" x="74.9124854142" y="458.254375729234" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="12.602100350052px">GND</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="
|
|
90
|
+
M 705.0175029167999,374.94049008166803
|
|
91
|
+
L 698.01633605566,371.15985997665246
|
|
92
|
+
L 698.01633605566,331.16919486582077
|
|
93
|
+
L 712.0186697779399,331.16919486582077
|
|
94
|
+
L 712.0186697779399,371.15985997665246
|
|
95
|
+
Z
|
|
96
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.400233372228px"/><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="705.0175029167999" y="368.63943990664205" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="12.602100350052px" transform="rotate(-90 705.0175029167999 368.63943990664205)">DEC1</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="
|
|
97
|
+
M 915.0525087509999,374.94049008166803
|
|
98
|
+
L 908.0513418898599,371.15985997665246
|
|
99
|
+
L 908.0513418898599,331.16919486582077
|
|
100
|
+
L 922.0536756121398,331.16919486582077
|
|
101
|
+
L 922.0536756121398,371.15985997665246
|
|
102
|
+
Z
|
|
103
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.400233372228px"/><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="915.0525087509999" y="368.63943990664205" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="12.602100350052px" transform="rotate(-90 915.0525087509999 368.63943990664205)">DEC3</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="
|
|
104
|
+
M 1125.0875145852,374.94049008166803
|
|
105
|
+
L 1118.08634772406,371.15985997665246
|
|
106
|
+
L 1118.08634772406,331.16919486582077
|
|
107
|
+
L 1132.0886814463402,331.16919486582077
|
|
108
|
+
L 1132.0886814463402,371.15985997665246
|
|
109
|
+
Z
|
|
110
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.400233372228px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="1125.0875145852" y="368.63943990664205" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="12.602100350052px" transform="rotate(-90 1125.0875145852 368.63943990664205)">DEC4</text>
|
|
111
|
+
</g>
|
|
112
|
+
</svg>
|
|
@@ -0,0 +1,79 @@
|
|
|
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="0,0.4 2,0.4" data-type="line" data-label="" points="76.52173913043478,271.30434782608694 320,271.30434782608694" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,0.4 4,0.4" data-type="line" data-label="" points="76.52173913043478,271.30434782608694 563.4782608695652,271.30434782608694" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2,0.4 4,0.4" data-type="line" data-label="" points="320,271.30434782608694 563.4782608695652,271.30434782608694" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.4 2,-0.4" data-type="line" data-label="" points="76.52173913043478,368.69565217391306 320,368.69565217391306" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-0.4 4,-0.4" data-type="line" data-label="" points="76.52173913043478,368.69565217391306 563.4782608695652,368.69565217391306" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2,-0.4 4,-0.4" data-type="line" data-label="" points="320,368.69565217391306 563.4782608695652,368.69565217391306" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,0.4 0,0.6000000000000001 2,0.6000000000000001 2,0.4" data-type="line" data-label="" points="76.52173913043478,271.30434782608694 76.52173913043478,246.9565217391304 320,246.9565217391304 320,271.30434782608694" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2,0.6000000000000001 4,0.6000000000000002 4,0.4" data-type="line" data-label="" points="320,246.9565217391304 563.4782608695652,246.95652173913038 563.4782608695652,271.30434782608694" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0,-0.4 0,-0.6000000000000001 2,-0.6000000000000001 2,-0.4" data-type="line" data-label="" points="76.52173913043478,368.69565217391306 76.52173913043478,393.0434782608696 320,393.0434782608696 320,368.69565217391306" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2,-0.6000000000000001 4,-0.6000000000000002 4,-0.4" data-type="line" data-label="" points="320,393.0434782608696 563.4782608695652,393.0434782608696 563.4782608695652,368.69565217391306" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="C1" data-x="0" data-y="0" x="40" y="271.30434782608694" width="73.04347826086956" height="97.39130434782612" fill="hsl(326, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="C2" data-x="2" data-y="0" x="283.47826086956525" y="271.30434782608694" width="73.0434782608695" height="97.39130434782612" fill="hsl(327, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="C3" data-x="4" data-y="0" x="526.9565217391305" y="271.30434782608694" width="73.0434782608695" height="97.39130434782612" fill="hsl(328, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="netId: VDD
|
|
4
|
+
globalConnNetId: connectivity_net0" data-x="0" data-y="0.8250000000000001" x="64.34782608695652" y="192.17391304347825" width="24.34782608695653" height="54.78260869565216" fill="#ef444466" stroke="#ef4444" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
5
|
+
globalConnNetId: connectivity_net1" data-x="0" data-y="-0.8250000000000001" x="64.34782608695652" y="393.0434782608696" width="24.34782608695653" height="54.78260869565213" fill="#00000066" stroke="#000000" stroke-width="0.008214285714285714"/></g><g><circle data-type="point" data-label="C1.1
|
|
6
|
+
y+" data-x="0" data-y="0.4" cx="76.52173913043478" cy="271.30434782608694" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
|
|
7
|
+
y-" data-x="0" data-y="-0.4" cx="76.52173913043478" cy="368.69565217391306" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.2
|
|
8
|
+
y-" data-x="2" data-y="-0.4" cx="320" cy="368.69565217391306" r="3" fill="hsl(3, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.1
|
|
9
|
+
y+" data-x="2" data-y="0.4" cx="320" cy="271.30434782608694" r="3" fill="hsl(2, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.1
|
|
10
|
+
y+" data-x="4" data-y="0.4" cx="563.4782608695652" cy="271.30434782608694" r="3" fill="hsl(243, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.2
|
|
11
|
+
y-" data-x="4" data-y="-0.4" cx="563.4782608695652" cy="368.69565217391306" r="3" fill="hsl(244, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
12
|
+
orientation: y+" data-x="0" data-y="0.6000000000000001" cx="76.52173913043478" cy="246.9565217391304" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
13
|
+
orientation: y-" data-x="0" data-y="-0.6000000000000001" cx="76.52173913043478" cy="393.0434782608696" 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[
|
|
14
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
15
|
+
const svg = e.currentTarget;
|
|
16
|
+
const rect = svg.getBoundingClientRect();
|
|
17
|
+
const x = e.clientX - rect.left;
|
|
18
|
+
const y = e.clientY - rect.top;
|
|
19
|
+
const crosshair = svg.getElementById('crosshair');
|
|
20
|
+
const h = svg.getElementById('crosshair-h');
|
|
21
|
+
const v = svg.getElementById('crosshair-v');
|
|
22
|
+
const coords = svg.getElementById('coordinates');
|
|
23
|
+
|
|
24
|
+
crosshair.style.display = 'block';
|
|
25
|
+
h.setAttribute('x1', '0');
|
|
26
|
+
h.setAttribute('x2', '640');
|
|
27
|
+
h.setAttribute('y1', y);
|
|
28
|
+
h.setAttribute('y2', y);
|
|
29
|
+
v.setAttribute('x1', x);
|
|
30
|
+
v.setAttribute('x2', x);
|
|
31
|
+
v.setAttribute('y1', '0');
|
|
32
|
+
v.setAttribute('y2', '640');
|
|
33
|
+
|
|
34
|
+
// Calculate real coordinates using inverse transformation
|
|
35
|
+
const matrix = {"a":121.73913043478262,"c":0,"e":76.52173913043478,"b":0,"d":-121.73913043478262,"f":320};
|
|
36
|
+
// Manually invert and apply the affine transform
|
|
37
|
+
// Since we only use translate and scale, we can directly compute:
|
|
38
|
+
// x' = (x - tx) / sx
|
|
39
|
+
// y' = (y - ty) / sy
|
|
40
|
+
const sx = matrix.a;
|
|
41
|
+
const sy = matrix.d;
|
|
42
|
+
const tx = matrix.e;
|
|
43
|
+
const ty = matrix.f;
|
|
44
|
+
const realPoint = {
|
|
45
|
+
x: (x - tx) / sx,
|
|
46
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
50
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
51
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
52
|
+
});
|
|
53
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
54
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
55
|
+
});
|
|
56
|
+
]]></script>
|
|
57
|
+
</g>
|
|
58
|
+
<g transform="translate(0, 1216)">
|
|
59
|
+
<style>
|
|
60
|
+
.boundary { fill: rgb(245, 241, 237); }
|
|
61
|
+
.schematic-boundary { fill: none; stroke: #fff; }
|
|
62
|
+
.component { fill: none; stroke: rgb(132, 0, 0); }
|
|
63
|
+
.chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
|
|
64
|
+
.component-pin { fill: none; stroke: rgb(132, 0, 0); }
|
|
65
|
+
.text { font-family: sans-serif; fill: rgb(0, 150, 0); }
|
|
66
|
+
.pin-number { fill: rgb(169, 0, 0); }
|
|
67
|
+
.port-label { fill: rgb(0, 100, 100); }
|
|
68
|
+
.component-name { fill: rgb(0, 100, 100); }
|
|
69
|
+
|
|
70
|
+
</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 212.9032258065 322.58064516128 L 212.9032258065 283.87096774191997 L 600.0000000001 283.87096774191997 L 600.0000000001 322.58064516128" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="30.967741935488004px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 212.9032258065 322.58064516128 L 212.9032258065 283.87096774191997 L 600.0000000001 283.87096774191997 L 600.0000000001 322.58064516128" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.8709677419360005px" 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 600.0000000001 283.87096774191997 L 987.0967741937001 283.87096774191997 L 987.0967741937001 322.58064516128" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="30.967741935488004px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 600.0000000001 283.87096774191997 L 987.0967741937001 283.87096774191997 L 987.0967741937001 322.58064516128" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.8709677419360005px" 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 212.9032258065 477.41935483872 L 212.9032258065 516.1290322580801 L 600.0000000001 516.1290322580801 L 600.0000000001 477.41935483872" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="30.967741935488004px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 212.9032258065 477.41935483872 L 212.9032258065 516.1290322580801 L 600.0000000001 516.1290322580801 L 600.0000000001 477.41935483872" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.8709677419360005px" 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 600.0000000001 516.1290322580801 L 987.0967741937001 516.1290322580801 L 987.0967741937001 477.41935483872" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="30.967741935488004px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 600.0000000001 516.1290322580801 L 987.0967741937001 516.1290322580801 L 987.0967741937001 477.41935483872" stroke="rgb(0, 150, 0)" fill="none" stroke-width="3.8709677419360005px" 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="600.0000000001" cy="283.87096774191997" r="5.8064516129040005" 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"><circle cx="600.0000000001" cy="516.1290322580801" r="5.8064516129040005" 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_3__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component-overlay sch-component-overlay" x="171.60774193552675" y="322.58064516128" width="82.59096774194649" height="154.83870967743997" fill="transparent"/><path class="sch-component-symbol-path" d="M 212.9032258065 477.41935483872 L 212.9032258065 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 212.9032258065 384.516129032256 L 212.9032258065 322.58064516128" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 254.19870967747323 415.483870967744 L 171.60774193552675 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 254.19870967747323 384.516129032256 L 171.60774193552675 384.516129032256" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="242.58064516134266" y="348.38709677418666" stroke="rgb(245, 241, 237)" stroke-width="3.8709677419360005px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="34.838709677424px">C1</text><text class="sch-component-text" x="242.58064516134266" y="451.61290322581334" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="34.838709677424px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="558.7045161291268" y="322.58064516128" width="82.59096774194654" height="154.83870967743997" fill="transparent"/><path class="sch-component-symbol-path" d="M 600.0000000001 477.41935483872 L 600.0000000001 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 600.0000000001 384.516129032256 L 600.0000000001 322.58064516128" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 641.2954838710733 415.483870967744 L 558.7045161291268 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 641.2954838710733 384.516129032256 L 558.7045161291268 384.516129032256" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="629.6774193549427" y="348.38709677418666" stroke="rgb(245, 241, 237)" stroke-width="3.8709677419360005px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="34.838709677424px">C2</text><text class="sch-component-text" x="629.6774193549427" y="451.61290322581334" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="34.838709677424px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="945.8012903227268" y="322.58064516128" width="82.59096774194654" height="154.83870967743997" fill="transparent"/><path class="sch-component-symbol-path" d="M 987.0967741937001 477.41935483872 L 987.0967741937001 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 987.0967741937001 384.516129032256 L 987.0967741937001 322.58064516128" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1028.3922580646733 415.483870967744 L 945.8012903227268 415.483870967744" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 1028.3922580646733 384.516129032256 L 945.8012903227268 384.516129032256" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="1016.7741935485427" y="348.38709677418666" stroke="rgb(245, 241, 237)" stroke-width="3.8709677419360005px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="ideographic" font-size="34.838709677424px">C3</text><text class="sch-component-text" x="1016.7741935485427" y="451.61290322581334" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="start" dominant-baseline="hanging" font-size="34.838709677424px"></text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="212.9032258065" cy="341.93548387096" r="7.741935483872001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="212.9032258065" cy="496.77419354840004" r="7.741935483872001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="600.0000000001" cy="496.77419354840004" r="7.741935483872001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="600.0000000001" cy="341.93548387096" r="7.741935483872001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="987.0967741937001" cy="341.93548387096" r="7.741935483872001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="987.0967741937001" cy="496.77419354840004" r="7.741935483872001" 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="
|
|
71
|
+
M 212.9032258065,283.87096774191997
|
|
72
|
+
L 193.54838709682,273.41935483869275
|
|
73
|
+
L 193.54838709682,207.04516129029685
|
|
74
|
+
L 232.25806451617999,207.04516129029685
|
|
75
|
+
L 232.25806451617999,273.41935483869275
|
|
76
|
+
Z
|
|
77
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="3.8709677419360005px"/><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="212.9032258065" y="266.45161290320794" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="34.838709677424px" transform="rotate(-90 212.9032258065 266.45161290320794)">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_1__stack1" x="189.677419354884" y="516.12903225808" width="46.45161290323199" height="34.83870967742405" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="M 189.677419354884 550.967741935504 L 236.12903225811598 550.967741935504" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" 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_1__stack1" d="M 212.9032258065 550.967741935504 L 212.9032258065 516.12903225808" stroke="rgb(132, 0, 0)" fill="none" stroke-width="3.8709677419360005px" 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_1__stack1" x="212.9032258065" y="560.645161290344" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="34.838709677424px">XX</text>
|
|
78
|
+
</g>
|
|
79
|
+
</svg>
|
|
@@ -0,0 +1,86 @@
|
|
|
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="0.4,0 0.4,2" data-type="line" data-label="" points="368.69565217391306,563.4782608695652 368.69565217391306,320" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.4,0 0.4,4" data-type="line" data-label="" points="368.69565217391306,563.4782608695652 368.69565217391306,76.52173913043475" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.4,2 0.4,4" data-type="line" data-label="" points="368.69565217391306,320 368.69565217391306,76.52173913043475" fill="none" stroke="hsl(222, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.4,0 -0.4,2" data-type="line" data-label="" points="271.30434782608694,563.4782608695652 271.30434782608694,320" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.4,0 -0.4,4" data-type="line" data-label="" points="271.30434782608694,563.4782608695652 271.30434782608694,76.52173913043475" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.4,2 -0.4,4" data-type="line" data-label="" points="271.30434782608694,320 271.30434782608694,76.52173913043475" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.4,0 0.6000000000000001,0 0.6000000000000001,2 0.4,2" data-type="line" data-label="" points="368.69565217391306,563.4782608695652 393.0434782608696,563.4782608695652 393.0434782608696,320 368.69565217391306,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.6000000000000001,2 0.6000000000000001,4 0.4,4" data-type="line" data-label="" points="393.0434782608696,320 393.0434782608696,76.52173913043475 368.69565217391306,76.52173913043475" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.4,0 -0.6000000000000001,0 -0.6000000000000001,2 -0.4,2" data-type="line" data-label="" points="271.30434782608694,563.4782608695652 246.9565217391304,563.4782608695652 246.9565217391304,320 271.30434782608694,320" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.6000000000000001,2 -0.6000000000000001,4 -0.4,4" data-type="line" data-label="" points="246.9565217391304,320 246.9565217391304,76.52173913043475 271.30434782608694,76.52173913043475" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="C1" data-x="0" data-y="0" x="271.30434782608694" y="526.9565217391305" width="97.39130434782612" height="73.0434782608695" fill="hsl(326, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="C2" data-x="0" data-y="2" x="271.30434782608694" y="283.47826086956525" width="97.39130434782612" height="73.0434782608695" fill="hsl(327, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="C3" data-x="0" data-y="4" x="271.30434782608694" y="40" width="97.39130434782612" height="73.0434782608695" fill="hsl(328, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="netId: VDD
|
|
4
|
+
globalConnNetId: connectivity_net0" data-x="0.8250000000000001" data-y="0" x="393.0434782608696" y="551.304347826087" width="54.78260869565213" height="24.347826086956502" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008214285714285714"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
5
|
+
globalConnNetId: connectivity_net1" data-x="-0.8250000000000001" data-y="0" x="192.17391304347825" y="551.304347826087" width="54.78260869565216" height="24.347826086956502" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008214285714285714"/></g><g><circle data-type="point" data-label="C1.1
|
|
6
|
+
x+" data-x="0.4" data-y="0" cx="368.69565217391306" cy="563.4782608695652" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
|
|
7
|
+
x-" data-x="-0.4" data-y="0" cx="271.30434782608694" cy="563.4782608695652" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.2
|
|
8
|
+
x-" data-x="-0.4" data-y="2" cx="271.30434782608694" cy="320" r="3" fill="hsl(3, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C2.1
|
|
9
|
+
x+" data-x="0.4" data-y="2" cx="368.69565217391306" cy="320" r="3" fill="hsl(2, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.1
|
|
10
|
+
x+" data-x="0.4" data-y="4" cx="368.69565217391306" cy="76.52173913043475" r="3" fill="hsl(243, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C3.2
|
|
11
|
+
x-" data-x="-0.4" data-y="4" cx="271.30434782608694" cy="76.52173913043475" r="3" fill="hsl(244, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
12
|
+
orientation: x+" data-x="0.6000000000000001" data-y="0" cx="393.0434782608696" cy="563.4782608695652" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
13
|
+
orientation: x-" data-x="-0.6000000000000001" data-y="0" cx="246.9565217391304" cy="563.4782608695652" 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[
|
|
14
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
15
|
+
const svg = e.currentTarget;
|
|
16
|
+
const rect = svg.getBoundingClientRect();
|
|
17
|
+
const x = e.clientX - rect.left;
|
|
18
|
+
const y = e.clientY - rect.top;
|
|
19
|
+
const crosshair = svg.getElementById('crosshair');
|
|
20
|
+
const h = svg.getElementById('crosshair-h');
|
|
21
|
+
const v = svg.getElementById('crosshair-v');
|
|
22
|
+
const coords = svg.getElementById('coordinates');
|
|
23
|
+
|
|
24
|
+
crosshair.style.display = 'block';
|
|
25
|
+
h.setAttribute('x1', '0');
|
|
26
|
+
h.setAttribute('x2', '640');
|
|
27
|
+
h.setAttribute('y1', y);
|
|
28
|
+
h.setAttribute('y2', y);
|
|
29
|
+
v.setAttribute('x1', x);
|
|
30
|
+
v.setAttribute('x2', x);
|
|
31
|
+
v.setAttribute('y1', '0');
|
|
32
|
+
v.setAttribute('y2', '640');
|
|
33
|
+
|
|
34
|
+
// Calculate real coordinates using inverse transformation
|
|
35
|
+
const matrix = {"a":121.73913043478262,"c":0,"e":320,"b":0,"d":-121.73913043478262,"f":563.4782608695652};
|
|
36
|
+
// Manually invert and apply the affine transform
|
|
37
|
+
// Since we only use translate and scale, we can directly compute:
|
|
38
|
+
// x' = (x - tx) / sx
|
|
39
|
+
// y' = (y - ty) / sy
|
|
40
|
+
const sx = matrix.a;
|
|
41
|
+
const sy = matrix.d;
|
|
42
|
+
const tx = matrix.e;
|
|
43
|
+
const ty = matrix.f;
|
|
44
|
+
const realPoint = {
|
|
45
|
+
x: (x - tx) / sx,
|
|
46
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
50
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
51
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
52
|
+
});
|
|
53
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
54
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
55
|
+
});
|
|
56
|
+
]]></script>
|
|
57
|
+
</g>
|
|
58
|
+
<g transform="translate(0, 1216)">
|
|
59
|
+
<style>
|
|
60
|
+
.boundary { fill: rgb(245, 241, 237); }
|
|
61
|
+
.schematic-boundary { fill: none; stroke: #fff; }
|
|
62
|
+
.component { fill: none; stroke: rgb(132, 0, 0); }
|
|
63
|
+
.chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
|
|
64
|
+
.component-pin { fill: none; stroke: rgb(132, 0, 0); }
|
|
65
|
+
.text { font-family: sans-serif; fill: rgb(0, 150, 0); }
|
|
66
|
+
.pin-number { fill: rgb(169, 0, 0); }
|
|
67
|
+
.port-label { fill: rgb(0, 100, 100); }
|
|
68
|
+
.component-name { fill: rgb(0, 100, 100); }
|
|
69
|
+
|
|
70
|
+
</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 654.54545454544 672.7272727273 L 681.81818181816 672.7272727273 L 681.81818181816 400.00000000010004 L 654.54545454544 400.00000000010004" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.818181818176px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 654.54545454544 672.7272727273 L 681.81818181816 672.7272727273 L 681.81818181816 400.00000000010004 L 654.54545454544 400.00000000010004" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.727272727272px" 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 681.81818181816 400.00000000010004 L 681.81818181816 127.27272727290006 L 654.54545454544 127.27272727290006" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.818181818176px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 681.81818181816 400.00000000010004 L 681.81818181816 127.27272727290006 L 654.54545454544 127.27272727290006" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.727272727272px" 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 545.45454545456 672.7272727273 L 518.18181818184 672.7272727273 L 518.18181818184 400.00000000010004 L 545.45454545456 400.00000000010004" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.818181818176px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 545.45454545456 672.7272727273 L 518.18181818184 672.7272727273 L 518.18181818184 400.00000000010004 L 545.45454545456 400.00000000010004" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.727272727272px" 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 518.18181818184 400.00000000010004 L 518.18181818184 127.27272727290006 L 545.45454545456 127.27272727290006" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="21.818181818176px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 518.18181818184 400.00000000010004 L 518.18181818184 127.27272727290006 L 545.45454545456 127.27272727290006" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.727272727272px" 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="681.81818181816" cy="400.00000000010004" r="4.090909090907999" 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"><circle cx="518.18181818184" cy="400.00000000010004" r="4.090909090907999" 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_3__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component-overlay sch-component-overlay" x="545.45454545456" y="643.6327272727623" width="109.0909090908799" height="58.1890909090755" fill="transparent"/><path class="sch-component-symbol-path" d="M 654.54545454544 672.7272727273 L 610.909090909088 672.7272727273" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 672.7272727273 L 545.45454545456 672.7272727273" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 610.909090909088 643.6327272727623 L 610.909090909088 701.8218181818378" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 643.6327272727623 L 589.090909090912 701.8218181818378" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="600" y="629.090909090948" stroke="rgb(245, 241, 237)" stroke-width="2.727272727272px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="24.545454545448px">C1</text><text class="sch-component-text" x="600" y="716.3636363636521" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="24.545454545448px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="545.45454545456" y="370.90545454556235" width="109.0909090908799" height="58.18909090907539" fill="transparent"/><path class="sch-component-symbol-path" d="M 654.54545454544 400.00000000010004 L 610.909090909088 400.00000000010004" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 400.00000000010004 L 545.45454545456 400.00000000010004" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 610.909090909088 370.90545454556235 L 610.909090909088 429.09454545463774" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 370.90545454556235 L 589.090909090912 429.09454545463774" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="600" y="356.363636363748" stroke="rgb(245, 241, 237)" stroke-width="2.727272727272px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="24.545454545448px">C2</text><text class="sch-component-text" x="600" y="443.6363636364521" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="24.545454545448px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="545.45454545456" y="98.17818181836236" width="109.0909090908799" height="58.18909090907539" fill="transparent"/><path class="sch-component-symbol-path" d="M 654.54545454544 127.27272727290006 L 610.909090909088 127.27272727290006" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 127.27272727290006 L 545.45454545456 127.27272727290006" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 610.909090909088 98.17818181836236 L 610.909090909088 156.36727272743775" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 589.090909090912 98.17818181836236 L 589.090909090912 156.36727272743775" stroke="rgb(132, 0, 0)" fill="none" stroke-width="2.727272727272px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="600" y="83.63636363654805" stroke="rgb(245, 241, 237)" stroke-width="2.727272727272px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="24.545454545448px">C3</text><text class="sch-component-text" x="600" y="170.90909090925206" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="24.545454545448px"></text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="668.1818181818" cy="672.7272727273" r="5.454545454544" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="559.09090909092" cy="672.7272727273" r="5.454545454544" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="559.09090909092" cy="400.00000000010004" r="5.454545454544" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="668.1818181818" cy="400.00000000010004" r="5.454545454544" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="668.1818181818" cy="127.27272727290006" r="5.454545454544" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="559.09090909092" cy="127.27272727290006" r="5.454545454544" 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="
|
|
71
|
+
M 681.81818181816,672.7272727273
|
|
72
|
+
L 689.1818181817945,659.09090909094
|
|
73
|
+
L 735.9454545454183,659.09090909094
|
|
74
|
+
L 735.9454545454183,686.36363636366
|
|
75
|
+
L 689.1818181817945,686.36363636366
|
|
76
|
+
Z
|
|
77
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.727272727272px"/><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="694.090909090884" y="672.7272727273" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="24.545454545448px" 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_1__stack1" d="
|
|
78
|
+
M 518.18181818184,672.7272727273
|
|
79
|
+
L 510.8181818182056,686.36363636366
|
|
80
|
+
L 464.05454545458167,686.36363636366
|
|
81
|
+
L 464.05454545458167,659.09090909094
|
|
82
|
+
L 510.8181818182056,659.09090909094
|
|
83
|
+
Z
|
|
84
|
+
" fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.727272727272px"/><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="505.90909090911595" y="672.7272727273" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="24.545454545448px" transform="">XX</text>
|
|
85
|
+
</g>
|
|
86
|
+
</svg>
|